本文共 1374 字,大约阅读时间需要 4 分钟。
1、用socket创建套接字文件,指定使用TCP协议
2、调用connect主动向服务器发起三次握手,进行连接 int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen); 功能:向服务器主动发起连接 返回值:成果返回0,失败返回-13、调用read(recv)和write(send)收发数据
ssize_t recv(int sockfd, const void *buf, size_t len, int flags); 用于通信描述符 应用缓存 长度 0 功能:向对方发送消息 ssize_t recv(int sockfd, void *buf, size_t len, int flags); 功能:接收对象发送消息4、调用close或者shutdown关闭连接
int shutdown(int sockfd, int how)功能:可能按照要求关闭连接,而且不管有多少个描述符指向同一连接,只要调用shutdown去操作了其中某个描述符,连接就会立即断开
返回值:成功返回0,失败返回-1 how: SHUT_RD:只断开读连接 SHUT_WR:只断开写;连接 SHUT_RDWR:读写连接都断开无法绑定解决:
int opt = 1; setsockopt(lisyenfd , SQL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt))UDP协议的C/S实现:
UDP协议没有建立连接特性,所以UDP协议没有自动记录对方IP 和端口号的特点,每次发送数据是,必须亲自指定的对方的IP 和端口号,只有这样才能把数据发送给对方 UDP:通信过程: 1、调用socket创建套接字 2、bind绑定固定的IP 和端口号 3、调用sendto和recvfrom函数,发送和接收数据 ssize_t send(int sockfd, const void *buf, size_t len, int flags, 存放数据缓存 缓存大小 0 const struct sockaddr *dest_addr, socklen_t addrlen); 填写目标的IP和端口 dest_addr的大小功能:发送数据当后面两个参数位NULL和0时,功能相当于send,send专门用于面向连接的通信。但对于向UDP 这样的无连接协议必须要用sendto,因此必须使用后两个参数
返回值:成功返回发送的字节数,失败返回-1ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
描述符 应用缓存 缓存大小 0 struct sockaddr *src_addr, socklen_t *addrlen);功能:接收数据后面两个参数位NULL和NULL时,功能相当于recv,send专门用于面向连接的通信。但对于向UDP 这样的无连接协议必须要用recvfrom,因此必须使用后两个参数
返回值:成功返回接收到的字节数,失败返回-1广播:
1、一个人发,然后其他所有人都接收 2、广播只能在局域网内部有效,广播数据是无法越过路由器的转载地址:http://gcjwn.baihongyu.com/