zoukankan      html  css  js  c++  java
  • 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);
    }
    

      

  • 相关阅读:
    贪心算法部分题目及知识点总结
    贪心算法(农夫修泥塘)
    贪心算法部分知识点
    丑数运算 一、((输出丑数n的下标)(给定丑数输下标)) 二、((求第n个丑数是谁)(给定下标求丑数))
    关于学习STL部分学到的零碎知识点
    STL中set与map的使用以及优先队列的部分补充内容以及重载运算符的使用
    回文素数与接水问题(OJ)
    关于字符串与整数转化的问题与一些常用字符串处理函数
    部分STL简单应用知识点
    【Python小游戏】俄罗斯方块
  • 原文地址:https://www.cnblogs.com/goul/p/9773507.html
Copyright © 2011-2022 走看看