预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

windows网络编程:Windows网络编程经验 小结 疯狂代码http://CrazyCoder.cn/ĵ:http:/CrazyCoder.cn/Security/Article71907.html 来源:http://www.juntuan.net 1.如果在已经处于ESTABLISHED状态下(般由端口号和标志符区分) close(般不会立即关闭而经历TIME_WAIT过程)后想继续重用该: BOOLbReuseaddr=TRUE; sockopt(s,SOL_SOCKET,SO_REUSEADDR,(constchar*)&bReuseaddr,(BOOL)); 2.如果要已经处于连接状态soket在close后强制关闭不经历 TIME_WAIT过程: BOOLbDontLinger=FALSE; sockopt(s,SOL_SOCKET,SO_DONTLINGER,(constchar*)&bDontLinger,(BOOL)); 3.在send,recv过程中有时由于网络状况等原因发收不能预期进行,而设置收发时限: nNetTimeout=1000;//1秒 //发送时限 sockopt(SOL_S0CKET,SO_SNDTIMEO(char*)&nNetTimeout,()); //接收时限 sockopt(SOL_S0CKET,SO_RCVTIMEO(char*)&nNetTimeout,()); 4.在send时候返回是实际发送出去字节(同步)或发送到缓冲区字节 (异步);系统默认状态发送和接收次为8688字节(约为8.5K);在实际过程中发送数据 和接收数据量比较大可以设置缓冲区而避免了send,recv不断循环收发: //接收缓冲区 nRecvBuf=32*1024;//设置为32K sockopt(s,SOL_SOCKET,SO_RCVBUF,(constchar*)&nRecvBuf,()); //发送缓冲区 nSendBuf=32*1024;//设置为32K sockopt(s,SOL_SOCKET,SO_SNDBUF,(constchar*)&nSendBuf,()); 5.如果在发送数据时希望不经历由系统缓冲区到缓冲区拷贝而影响 性能: nZero=0; sockopt(SOL_S0CKET,SO_SNDBUF(char*)&nZero,(nZero)); 6.同上在recv完成上述功能(默认情况是将缓冲区内容拷贝到系统缓冲区): nZero=0; sockopt(SOL_S0CKET,SO_RCVBUF(char*)&nZero,()); 7.般在发送UDP数据报时候希望该发送数据具有广播特性: BOOLbBroadcast=TRUE; sockopt(s,SOL_SOCKET,SO_BROADCAST,(constchar*)&bBroadcast,(BOOL)); 8.在client连接服务器过程中如果处于非阻塞模式下在connect过程中可 以设置connect延时,直到accpet被呼叫(本设置只有在非阻塞过程中有显著 作用在阻塞中作用不大) BOOLbConditionalAccept=TRUE; sockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(constchar*)&bConditionalAccept,(BOOL)); 9.如果在发送数据过程中(send没有完成还有数据没发送)而了close,以前我们 般采取措施是"从容关闭"shutdown(s,SD_BOTH),但是数据是肯定丢失了如何设置让满足具体 应用要求(即让没发完数据发送出去后在关闭)? structlinger{ u_;;;l_onoff; u_;;;l_linger; }; lingerm_sLinger; m_sLinger.l_onoff=1;//(在close,但是还有数据没发送完毕时候容许逗留) //如果m_sLinger.l_onoff=0;则功能和2.)作用相同; m_sLinger.l_linger=5;//(容许逗留时间为5秒) sockopt(s,SOL_SOCKET,SO_LINGER,(constchar*)&m_sLinger,(linger)); Note:1.在设置了逗留延时用于个非阻塞是作用不大最好不用; ;;2.如果想要不经历SO_LINGER需要设置SO_DONTLINGER或者设置l_onoff=0; 10.还个用比较少是在SDI或者是Dialog中可以记录调试信息: (前不久做过这个测试调式信息可以保存