c语言网络socket编程笔记(自用版-非博文)
TCP
server (牵扯到两次字节序的转换 主机转网络bind 网络转主机accept) * socket() 创建TCP的监听套接子 * bind() 将我的监听套接子,和我的IP及端口绑定 * listen() 设置监听 * accept() 阻塞等待连接的到来,并返回通信用的套接字 * read/recv write/send 读写 * colse() 删除我的套接子 *注意: 1 TCP是流式套接子,默认0为TCP *socket() 2 绑定时设置我结构体的时候(sockaddr_in) ,注意主机字节序和 网络字节序 3 主机字节序和网络字节序互相转换的接口 htons() 端口 主机转网络字节序 htonl() ip 主机转网络字节序(不常用,我们一般用点分十进制的APi) *点分十进制的转换接口 ip地址 int inet_pton(int af, const char *src, void *dst) ip 主机转网络字节序 由于转换后的是整形形式,所以不需要长度的参数 冒分 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) ip 网络转主机字节序 由于转化后我们的到的依然是点分十进制表示的IP字符串,因此参数最后需要长度参数 冒分 inet_addr() ip 主机转网络字节序(仅适用IPV4,不常用) 点分 inet_ntoa() ip 网络转主机字节序(仅适用IPV4,不常用) 点分 4 setsockoopt() 使用它可以设置我的套接子允许重复使用本机地址,或端口复用
client (牵扯到一次字节序的转换 主机转网络connect) 1 socket() * connect() 设置连接 3 read/recv write/send 4 close()
UDP
server * socket() 创建我的UDP通信套接子 * bind() 将我的套接子和我的IP端口绑定(服务器的IP端口一定要绑定) * recvfrom() 读数据(注意:除了读数据还会读到对方的IP和Port信息,所以这里需要定义一个sockaddr_in的结构体) * sendto() 写数据(注意:这里发送对象的结构体按情况写对应的就好了,比如回复,广播,多播) * close() 删除我的套接子
client 1 socket() 2 sendto() 3 recvfrom() 4 close()
广播 发送者 * setsockopt(fd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on) 广播的发送者需要用它来赋予权限 * 定义广播结构体sockaddr_in用于sendto() 接收者 * bind() 由于想要最终收到广播信息,需要端口对应上才行,所以我们接收者需要绑定一个固定的端口,IP就写 本网段的广播地址 或 INADDR_ANY
多播 发送者 * 定义多播结构体sockaddr_in用于sendto() 多播信息的发送不用赋予权限 接收者 * 定义 ip_mreq 结构体变量,填入Ip协议族,本地网段(INADDR_ANY),和需要加入的组播地址(D类地址) * setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) 通过这句话把我的IP加入多播组IP * bind() 可以绑定一个固定端口,结构体IP填写多播地址就可以了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 道远日暮时不存!