一、UDP协议
1.recvfrom:recvform(int sockfd,void *buf,size_t len,int flags,struct sockaddr *src_addr,socklen_t *addrlen);
参数:socket的fd; 保存数据的空间地址 ; 空间大小;
默认接收方式(默认阻塞)MSG_DONTWAIT不阻塞方式 没有东西就等待
用来保存发送方的地址信息;表示发送方发送实际的地址信息大小;
(如果不关系发送方信息,则后两个参数可以写为NULL)
成功返回接收到的字节数 失败返回-1
1)inet_ntoa()将网络的字节序变成字符串类型
2)ntohs()将网络的端口转换成主机号
3)当socket创建后没有地址绑定,bind就是绑定地址
2.bind:int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
功能:如果在服务端调用,则表示将参数1相关的文件描述符与参数2指定的接口地址关联
用于从该接口接收数据,若在客户端,则表示将数据从参数1所在的描述符中取出并
从参数2所在接口设备发送出去(一般客户端可以省略)
参数:sockfd 通过socket函数创建的文件描述符
套接字 id my_addr 是物理接口的结构体指针
客户端可以绑定地址,但一般不会绑定
如果服务器没有绑定地址,那么客户端会找不到
二、TCP
1.客户端过程:
1)建立连接:socket------bind(可选)------connect(发起连接)
connect:int connect(int sockfd,const struct sockaddr *addr,socklen_t addrlen)
参数:sockfd 本地创建的套接字
addr 远程目标主机的地址信息
addrlen 地址信息的长度
成功返回0 失败返回-1
2)通信过程:read-----write------close
2.服务器过程:
1)建立连接:socket------bind------listen------accept
2)通信过程:read-----write------close
3.TCP连接建立
1)TCP三次握手(建立连接)
2)TCP四次握手(断开链接)
4.listen :int listen(int sockfd,int backlog)反应监听那个套接字并且建立成功之后返回新的套接字
参数:当前套接字 同时监听的个数
成功返回新的套接字 失败返回-1
listen会标记一下被动的socket(这个socket被用来接收到来的接受请求)
有两个socket:一是监听的socket,二是处理建立连接的socket