• UNIX下socket通信


    一、UNIX下socket通信:

         socket套接字是一种可以进行网络通信的内核对象,它是一个唯一的标示符,一般称它为socket描述符。

      注意:UDP通信需要客户端先发送消息,服务端先进行等待客户端发送的消息,记录下客户端的地址,才能向客户端发送消息。= =!

     int socket(int domain,int type,int protocol)
    
     功能:创建socket对象
    
       1、domain通信地址类型:
    
               a、AF_UNIX/AF_LOCAL:本地进程通信
    
               b、AF_INET:使用ipv4地址通信
    
               c、AF_INET6:使用ipv6通信

           d、AF_UOSPEC:未指定   2、type通信的协议类型(4种,以下列举出最常用的两种): SOCK_STREAM:数据流协议,TCP面向连接的通信协议 SOCK_DGRAM:数据报协议,UDP面向无连接的通信协议 3、protocol:特殊协议,一般不用,一般为0;
      
      返回值:若成功,返回文件(套接字)描述符; 若出错,返回-1
      
    //socket udp 服务端
    #include<stdio.h>
    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<arpa/inet.h>
    
    int main()
    {
        //创建socket对象
        int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    
        //创建网络通信对象
        struct sockaddr_in addr;
        addr.sin_family =AF_INET;
        addr.sin_port =htons(1324);
        addr.sin_addr.s_addr=inet_addr("127.0.0.1");
    
        //绑定socket对象与通信链接
        int ret =bind(sockfd,(struct sockaddr*)&addr,sizeof(addr));
        if(0>ret)
        {
            printf("bind
    ");
            return -1;
    
        }
        struct sockaddr_in cli;
        socklen_t len=sizeof(cli);
    
        while(1)
        {
            char buf =0;
            recvfrom(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&cli,&len);
            printf("recv num =%hhd
    ",buf);
    
            buf =66;
            sendto(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&cli,len);
    
        }
        close(sockfd);
    }
    
    //socket udp 客户端
    #include<stdio.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<unistd.h>
    #include<arpa/inet.h>
    
    int main()
    {
        //创建socket对象
        int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    
        //创建网络通信对象
        struct sockaddr_in addr;
        addr.sin_family =AF_INET;
        addr.sin_port =htons(1324);
        addr.sin_addr.s_addr = inet_addr("192.168.0.143");
    
        while(1)
        {
            printf("请输入一个数字:");
            char buf=0;
            scanf("%hhd",&buf);
            sendto(sockfd,&buf,
            sizeof(buf),0,(struct sockaddr*)&addr,sizeof(addr));
    
            socklen_t len=sizeof(addr);
            recvfrom(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&addr,&len);
    
            if(66 ==buf)
            {
                printf(" server 成功接受
    ");
            }
            else
            {
                printf("server 数据丢失
    ");
            }
    
        }
        close(sockfd);
    }
    

      

  • 相关阅读:
    supervisor
    ULB
    RAM
    sshpass和做软链接
    阿里RDS
    阿里EMR部署
    kafka原理和操作
    maven---settings.xml配置
    maven项目导出依赖的Jar包以及项目本身以jar包形式导出详细教程
    Maven中settings.xml的配置项说明精讲
  • 原文地址:https://www.cnblogs.com/goul/p/9773507.html
Copyright © 2020-2023  润新知