一.recvfrom
 recvfrom函数是一个系统调用,用于从套接字接收数据。该函数通常与无连接的数据报服务(如 UDP)一起使用,但也可以与其他类型的套接字使用。与简单的 recv() 函数不同,recvfrom() 可以返回数据来源的地址信息。
函数原型为:
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                  struct sockaddr *src_addr, socklen_t *addrlen);
 参数解释:
sockfd:一个已打开的套接字的描述符。
buf:一个指针,指向用于存放接收到的数据的缓冲区。
len:缓冲区的大小(以字节为单位)。
flags:控制接收行为的标志。通常可以设置为0,但以下是一些可用的标志:
MSG_WAITALL:尝试接收全部请求的数据。函数可能会阻塞,直到收到所有数据。
 MSG_PEEK:查看即将接收的数据,但不从套接字缓冲区中删除它【1】。
 其他一些标志还可以影响函数的行为,但在大多数常规应用中很少使用。
 src_addr:一个指针,指向一个 sockaddr 结构,用于保存发送数据的源地址。
addrlen:一个值-结果参数。开始时,它应该设置为 src_addr 缓冲区的大小。当 recvfrom() 返回时,该值会被修改为实际地址的长度(以字节为单位)。
返回值:
在成功的情况下,recvfrom() 返回接收到的字节数。
 如果没有数据可读或套接字已经关闭,那么返回值为0。
 出错时,返回 -1,并设置全局变量 errno 以指示错误类型。
二.bind
       int bind(int sockfd, const struct sockaddr *addr,
                 socklen_t addrlen);
   
 2、int bind(int sockfd, struct sockaddr *my_addr, 
              socklen_t addrlen);
 功能:如果该函数在服务器端调用,则表示将参数1相关
       的文件描述符文件与参数2 指定的接口地址关联,
       用于从该接口接受数据。
      如果该函数在客户端调用,则表示要将数据从
       参数1所在的描述符中取出并从参数2所在的接口
       设备上发送出去。
      注意:
         如果是客户端,则该函数可以省略,由默认
             接口发送数据。
 参数:
       sockfd 之前通过socket函数创建的文件描述符,套接字id
       my_addr 是物理接口的结构体指针。表示该接口的信息。
      struct sockaddr      通用地址结构 --- ip + 端口 
       {
           u_short sa_family;  地址族
           char sa_data[14];   地址信息
       };
  
三.tcp

基于tcp:
tcp 客户端:
 //1.建立连接
 socket        //买了一部手机 
 bind //可选   //插上sim卡 
 connect       //拨打电话 
 ....
 //2.通信过程 
 read 
 write 
 close 
tcp服务器:
 //1.建立连接 
 socket  //买了一部手机 
 bind    //插上sim卡 
 listen  //监听 客户端的连接请求 
 accept  //接听 ---这一步完成之后 连接就建立好了,之后就可以收发数据  
 ..... 
 //2.通信过程 
 read 
 write 
 close 
  
四。tcp如何建立链接
tcp三次握手
客户端                        服务器 
      -----我要和你建立连接--->
      <----好的,可以建立连接--
      -----好 ----------------> 
      
      
 断开连接 
     tcp 四次回收 
 客户端                        服务器 
      -----我要和你断开连接--->
      <----好的,可以断开------
      <----我也要断开----------
      -----好 ----------------> 
  tcp 客户端:
 //1.建立连接
 socket        //买了一部手机 
 bind //可选   //插上sim卡 
 connect       //拨打电话     
      
五.connect
 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
 //拨打电话 --- 知道对方的号码 
 功能:该函数固定有客户端使用,表示从当前主机向目标
             主机发起链接请求。
    参数:sockfd 本地socket创建的套接子id
             addr 远程目标主机的地址信息。
          addrlen: 参数2的长度。
    返回值:成功 0
               失败 -1;
 六.listen
int listen(int sockfd, int backlog)
功能:反应监听那个套接字并且建立成功之后返回一个新的套接字
参数:当前的套接字同时可以监听的个数
返回值 正确 返回建立的新的套接字 错误 返回 -1
listen原理:


















