2.1 Linux下实现简单UDP通信

UDP发送实现过程
    服务器端:
    1,创建socket;
    2,配置并绑定地址/端口;
    3,与通讯对象建立连接并发送;
    4,断开连接
    客户端:
    1,创建socket;
    2,发送数据;
    3,断开连接

1.创建socket
    (1)使用socket函数,socket(组,传输类型,协议);
    (2)组包括: (目前使用AF_INET)
        AF_INET(IPv4),AF_INET6(IPv6);
    (3)传输类型: (目前实现UDP使用SOCK_DGRAM)
        SOCK_STREAM:双向可靠字节流;
        SOCK_DGRAM:支持无连接,不可靠传输;
    (4)协议: 一个组只有一种协议,所以为0;


2.配置并绑定地址/端口
    (1)使用结构体sockaddr_in配置地址/端口
        头文件为: <netinet/in.h>
         struct sockaddr_in {
             __kernel_sa_family_t  sin_family;
             __be16        sin_port;   
             struct in_addr    sin_addr;   
             unsigned char     __pad[__SOCK_SIZE__ - sizeof(short int) -
             sizeof(unsigned short int) - sizeof(struct in_addr)];
         };
        //family --> AF_INEF;
        //port   --> htons(PORT);
        //sin_addr.addr --> inet_addr(IP);
    (2)使用bind绑定端口/地址

3.与通讯对象建立连接并传输
    (1)发送
        sendto():在函数中指定目的地址/端口并发送
        send():前面使用connect()函数指定目的地址/端口,然后发送
    (2)接收
         recvfrom():在函数中指定源地址/端口并接收
        recv():先使用connect()函数指定源端口,然后接收

函数说明
    socket():
        //头文件为<sys/types.h> <sys/socket.h>
        //--创建socket网络套接字
    htons()
    ntohs():
        //头文件为<arpa/inet.h> 
        //htons--将16位整型的主机字节顺序转为网络字节顺序
        //ntohs--将16位网络字节顺序转为主机字节顺序;
    inet_addr()
    inet_ntoa():
        //头文件为<sys/socket.h> <netinet/in.h> <arpa/inet.h>
        //inet_addr--将字符型转为32位的网络IP;
        //inet_nota--将32位网络字节的IP转为对应的字符串IP
    inet_ntoa():
        //
    bind():
        //头文件为<sys/types.h> <sys/socket.h>
        //--将为本地绑定网络端口和地址
    connect():
        //头文件为<sys/types.h> <sys/socket.h>
        //--和客户端建立连接
    send()
    sendto():
        //头文件为<sys/types.h> <sys/socket.h>
        //send通过socket发送数据
        //sendto 与客户端建立连接并发数据
    recv()
    revcfrom():
        //头文件为<sys/types.h> <sys/socket.h>
        //recv从socket接收数据
        //recvfrom与服务端建立建立并接收数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值