TCP 2

通过路由器实现网络层的传输

客户端:
      1.socket  //电话 
      2.bind    //号码(可选) 
      3.connect //拨打电话    【面向连接】
      --------------------------
      4.read/write            【进行通信】
        recv / send  

      5.close

服务器端:
   //server 
  1.socket  //电话 
  2.bind    //号码 
  3.listen  //待机(监听)   //监听socket 
  4.accept  //接听        【面向连接】
  -------------------------
  5.read/write            【进行通信】
    recv / send  
    //写 
       //读 
      
       //多任务 (进程/线程)
       
       //任务1:
         写 
       //任务2:
         读 
  5.close
 

能fflush的是标准io的缓冲区

粘包问题是连续write, 数据粘一起了

0是阻塞, DONTWAIT非阻塞

ssize_t recv(int sockfd, void *buf, size_t len,
             int flags);
功能:从指定的sockfd套接字中以flags方式获取长度
      为len字节的数据到指定的buff内存中。
参数:sockfd  
        如果服务器则是accept的返回值的新fd
        如果客户端则是socket的返回值旧fd
      buff 用来存储数据的本地内存,一般是数组或者
      动态内存。
      len 要获取的数据长度
      flags 获取数据的方式,0 表示阻塞接受。

返回值:成功 表示接受的数据长度,一般小于等于len
        失败  -1;
----------------------------------------------------------------------------

int send(int sockfd, const void *msg, 
        size_t len, int flags);
   功能:从msg所在的内存中获取长度为len的数据以flags
            方式写入到sockfd对应的套接字中。

   参数:sockfd:
               如果是服务器则是accept的返回值新fd
            如果是客户端则是sockfd的返回值旧fd

         msg 要发送的消息
         len 要发送的消息长度
         flags 消息的发送方式。

  返回值:成功  发送的字符长度
            失败  -1;

UDP协议:


udp是发一次收一次, tcp是发多次,一次性收

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值