TCPIP Winsock网络编程综述

TCPIP Winsock网络编程综述

ID:41032650

大小:29.50 KB

页数:6页

时间:2019-08-14

TCPIP Winsock网络编程综述_第1页
TCPIP Winsock网络编程综述_第2页
TCPIP Winsock网络编程综述_第3页
TCPIP Winsock网络编程综述_第4页
TCPIP Winsock网络编程综述_第5页
资源描述:

《TCPIP Winsock网络编程综述》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、TCP/IPWinsock网络编程综述利用Winsock编程由同步和异步方式,同步方式逻辑清晰,编程专注于应用,在抢先式的多任务操作系统中(WinNt、Win2K)采用多线程方式效率基本达到异步方式的水平,应此以下为同步方式编程要点。  1、快速通信  Winsock的Nagle算法将降低小数据报的发送速度,而系统默认是使用Nagle算法,使用    intsetsockopt(   SOCKETs,  intlevel,  intoptname,  constcharFAR*optval,  intoptlen   );函数关闭它  例子:   SOCKETsConnect;

2、  sConnect=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  intbNodelay=1;  interr;  err=setsockopt(  sConnect,  IPPROTO_TCP,  TCP_NODELAY,  (char*)amp;bNodelay,  sizoeof(bNodelay));//不采用延时算法    if(err!=NO_ERROR)  TRACE("setsockoptfailedforsomereason");;  2、SOCKET的SegMentSize和收发缓冲  TCPSegMentSi

3、ze是发送接受时单个数据报的最大长度,系统默认为1460,收发缓冲大小为8192。  在SOCK_STREAM方式下,如果单次发送数据超过1460,系统将分成多个数据报传送,在对方接受到的将是一个数据流,应用程序需要增加断帧的判断。当然可以采用修改注册表的方式改变1460的大小,但MicrcoSoft认为1460是最佳效率的参数,不建议修改。  在工控系统中,建议关闭Nagle算法,每次发送数据小于1460个字节(推荐1400),这样每次发送的是一个完整的数据报,减少对方对数据流的断帧处理。  3、同步方式中减少断网时connect函数的阻塞时间  同步方式中的断网时conne

4、ct的阻塞时间为20秒左右,可采用gethostbyaddr事先判断到服务主机的路径是否是通的,或者先ping一下对方主机的IP地址。  A、采用gethostbyaddr阻塞时间不管成功与否为4秒左右。  例子:  LONGlPort=3024;  structsockaddr_inServerHostAddr;//服务主机地址   ServerHostAddr.sin_family=AF_INET;    ServerHostAddr.sin_port=::htons(u_short(lPort));    ServerHostAddr.sin_addr.s_addr=::

5、inet_addr("192.168.1.3");    HOSTENT*pResult=gethostbyaddr((constchar*)amp;    (ServerHostAddr.sin_addr.s_addr),4,AF_INET);    if(NULL==pResult)  {  intnErrorCode=WSAGetLastError();    TRACE("gethostbyaddrerrorcode=%d",nErrorCode);   }    else    {  TRACE("gethostbyaddr%s",pResult->h_name)

6、;;  }  B、采用PING方式时间约2秒左右  暂略    4、同步方式中解决recv,send阻塞问题  采用select函数解决,在收发前先检查读写可用状态。  A、读  例子:  TIMEVALtv01={0,1};//1ms钟延迟,实际为0-10毫秒   intnSelectRet;    intnErrorCode;  FD_SETfdr={1,sConnect};  nSelectRet=::select(0,amp;fdr,NULL,NULL,amp;tv01);//检查可读状态  if(SOCKET_ERROR==nSelectRet)    {  nErr

7、orCode=WSAGetLastError();  TRACE("selectreadstatuserrorcode=%d",nErrorCode);  ::closesocket(sConnect);  goto重新连接(客户方),或服务线程退出(服务方);   }  if(nSelectRet==0)//超时发生,无可读数据    {  继续查读状态或向对方主动发送  }  else{    读数据    }  B、写   TIMEVALtv01={0,1};//1ms钟延迟,实际为9

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。