linux网络编程

来源:互联网 发布:防御阵型中文版mac 编辑:程序博客网 时间:2024/06/06 01:44

TCP/IP封包格式

网络层(IP层:是一种不可靠的尽力传输)

TCP头:

tcp是一种可靠传输: 通过确认和重发机制实现可靠传输

TCP的三次和四次握手:

注意:
  三次握手和四次握手要求笔试的时候能直接画出来
 

  要点:
   1.要标注客户端和服务器
      2.三次握手一定是客户端先发起(另外, 四次握手可以客户端和服务器任意一个先发起)
      3.要标注SYN/ACK, FIN/ACK的工作原理


带外数据(紧急数据)的发送接收:
  1.带外数据也叫紧急数据,通用用于一些紧急的情况和要求延迟小的数据。
  2.紧急数据一次只能发送一个字节,而且它会随普通数据一起发送

以网络播放器为例:

播放器端(客户端):发送带外数据:  
    send(fd, 'p',1, MSG_OOB);  //带外数据只有一个字节有效,若发送了多个字节,则除最后那个字节为带外数据外,其他的字节会被当成正常的数据

视频服务器(服务器):接收的带外数据:
     当带外数据到达时: 
       1.系统会给应用发送SIGURG信号          
       2.如果fd被添加在select()的函数的异常集合中,则带外数据到达时,select会退出
     
  编程:
    第一种方法: 捕获SIGURG信号,在相应的信号处理函数中去调用recv()去接收:

int fd = -1; 
void sig_urg_handler(int signo)
{
    char buf_urg[1];
   if(signo != SIGURG) return;
   
    recv(fd, buf_urg, 1, MSG_OOB);
    switch(buf_urg[0]) {
        case 's': //停止
    case 'c': //继续
        //....
    }
 
 
}   
 
int  main(void)
{
  // ...
   signal(SIGURG, sig_urg_handler);
  //...

  while(1) {
       recv(fd, buf,BUFSIZ,0);    
   }
 
}      

第二种方法:
   在select的异常集中中添加对各个建立连接的文件描述符的监控


0 0
原创粉丝点击