如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
windows网络编程:Windows网络编程经验小结疯狂代码http://CrazyCoder.cn/ĵ:http:/CrazyCoder.cn/Security/Article71907.html来源:http://www.juntuan.net1.如果在已经处于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;//设置为32Ksockopt(s,SOL_SOCKET,SO_RCVBUF,(constchar*)&nRecvBuf,());//发送缓冲区nSendBuf=32*1024;//设置为32Ksockopt(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中可以记录调试信息:(前不久做过这个测试调式信息可以保存