windows网络编程 网络编程经验.pdf

上传人:asd****56 文档编号:70331395 上传时间:2023-01-19 格式:PDF 页数:14 大小:131.29KB
返回 下载 相关 举报
windows网络编程 网络编程经验.pdf_第1页
第1页 / 共14页
windows网络编程 网络编程经验.pdf_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《windows网络编程 网络编程经验.pdf》由会员分享,可在线阅读,更多相关《windows网络编程 网络编程经验.pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、windows网络编程:Windows网络编程经验小结 疯狂代码 http:/CrazyC 来源:http:/ 1.如果在已经处于 ESTABLISHED状态下(般由端口号和标志符区分)close(般不会立即关闭而经历TIME_WAIT过程)后想继续重用该:BOOL bReuseaddr=TRUE;sockopt(s,SOL_SOCKET,SO_REUSEADDR,(const char*)&bReuseaddr,(BOOL);2.如果要已经处于连接状态soket在close后强制关闭不经历 TIME_WAIT过程:BOOL bDontLinger=FALSE;sockopt(s,SOL_SO

2、CKET,SO_DONTLINGER,(const char*)&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)

3、;在实际过程中发送数据 和接收数据量比较大可以设置缓冲区而避免了send,recv不断循环收发:/接收缓冲区 nRecvBuf=32*1024;/设置为32K sockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,();/发送缓冲区 nSendBuf=32*1024;/设置为32K sockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,();5.如果在发送数据时希望不经历由系统缓冲区到缓冲区拷贝而影响 性能:nZero=0;sockopt(SOL_S0CKET,SO_SNDBUF(cha

4、r*)&nZero,(nZero);6.同上在recv完成上述功能(默认情况是将缓冲区内容拷贝到系统缓冲区):nZero=0;sockopt(SOL_S0CKET,SO_RCVBUF(char*)&nZero,();7.般在发送UDP数据报时候希望该发送数据具有广播特性:BOOL bBroadcast=TRUE;sockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,(BOOL);8.在client连接服务器过程中如果处于非阻塞模式下在connect过程中可 以设置connect延时,直到accpet被呼叫(本设置只有在非阻塞过程中

5、有显著 作用在阻塞中作用不大)BOOL bConditionalAccept=TRUE;sockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bConditionalAccept,(BOOL);9.如果在发送数据过程中(send没有完成还有数据没发送)而了close,以前我们 般采取措施是从容关闭shutdown(s,SD_BOTH),但是数据是肯定丢失了如何设置让满足具体 应用要求(即让没发完数据发送出去后在关闭)?struct linger u_;l_onoff;u_;l_linger;linger m_sLinger;m_sLi

6、nger.l_onoff=1;/(在close,但是还有数据没发送完毕时候容许逗留)/如果m_sLinger.l_onoff=0;则功能和2.)作用相同;m_sLinger.l_linger=5;/(容许逗留时间为5秒)sockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,(linger);Note:1.在设置了逗留延时用于个非阻塞是作用不大最好不用;2.如果想要不经历SO_LINGER需要设置SO_DONTLINGER或者设置l_onoff=0;10.还个用比较少是在SDI或者是Dialog中可以记录调试信息:(前不久做过这个测试调式信

7、息可以保存包括建立时候参数,采用 具体协议以及出错代码都可以记录下来)BOOL bDebug=TRUE;sockopt(s,SOL_SOCKET,SO_DEBUG,(const char*)&bDebug,(BOOL);11.附加:往往通过sockopt设置了缓冲区大小但还不能满足数据传输需求 我习惯是自己写个处理网络缓冲类动态分配内存;下面我将这个类写出希望对 初学者有所帮助:/仿照String;改写而成 /=/2进制数据主要用于收发网络缓冲区数据 /CNetIOBuffer 以 MFC 类 CString 源代码作为蓝本改写而成使用方法和 CString 类似 /但是 CNetIOBuff

8、er 中存放是纯粹 2进制数据0 并不作为它结束标志 /其数据长度可以通过 GetLength 获得缓冲区地址可以通过运算符 LPBYTE 获得 /=/;Copyright(c)All-Vision Corporation.All rights reserved./;Module:;NetObject /;File:;SimpleIOBuffer.h /;Author:;gdy119 /;Email:; /;Date:;2004.11.26 /=/NetIOBuffer.h#ndef _NETIOBUFFER_H#_NETIOBUFFER_H /=#;MAX_BUFFER_LENGTH;102

9、4*1024 /=/主要用来处理网络缓冲数据 ;CNetIOBuffer;protected:LPBYTE;m_pbinData;m_nLength;m_nTotalLength;CRITICAL_SECTIONm_cs;void;Initvalibers;public:CNetIOBuffer;CNetIOBuffer(const LPBYTE lb,nLength);CNetIOBuffer(const CNetIOBuffer&binarySrc);virtual CNetIOBuffer;/=BOOL;CopyData(const LPBYTE lb,nLength);BOOL;Con

10、catData(const LPBYTE lb,nLength);void;ReIoBuffer;GetLength const;BOOL;SetLength(nLen);LPBYTE;GetCurPos;GetReLen;BOOL;IsEmpty const;operator;LPBYTE const;GetMaxLength MAX_BUFFER_LENGTH;const CNetIOBuffer&operator=(const CNetIOBuffer&buffSrc);#end/NetOBuffer.cpp:implementation of the CNetIOBuffer./=#s

11、tdafx.h#NetIOBuffer.h /=/=/Construction/Destruction CNetIOBuffer:CNetIOBuffer Initvalibers;CNetIOBuffer:CNetIOBuffer(const LPBYTE lb,nLength)Initvalibers;CopyData(lb,nLength);CNetIOBuffer:CNetIOBuffer delete m_pbinData;m_pbinData=NULL;DeleteCriticalSection(&m_cs);CNetIOBuffer:CNetIOBuffer(const CNet

12、IOBuffer&binarySrc);Initvalibers;CopyData(binarySrc,binarySrc.GetLength);void CNetIOBuffer:Initvalibers m_pbinData;=NULL;m_nLength;=0;m_nTotalLength=MAX_BUFFER_LENGTH;(m_pbinDataNULL)m_pbinData=BYTEm_nTotalLength;ASSERT(m_pbinData!=NULL);InitializeCriticalSection(&m_cs);void CNetIOBuffer:ReIoBuffer

13、EnterCriticalSection(&m_cs);m_nLength=0;mem(m_pbinData,0,m_nTotalLength);LeaveCriticalSection(&m_cs);BOOL CNetIOBuffer:CopyData(const LPBYTE lb,nLength)(nLength MAX_BUFFER_LENGTH)FALSE;ReIoBuffer;EnterCriticalSection(&m_cs);memcpy(m_pbinData,lb,nLength);m_nLength=nLength;LeaveCriticalSection(&m_cs);

14、TRUE;BOOL CNetIOBuffer:ConcatData(const LPBYTE lb,nLength)(m_nLength+nLength MAX_BUFFER_LENGTH)FALSE;EnterCriticalSection(&m_cs);memcpy(m_pbinData+m_nLength,lb,nLength);m_nLength nLength;LeaveCriticalSection(&m_cs);TRUE;CNetIOBuffer:GetLength const m_nLength;BOOL CNetIOBuffer:SetLength(nLen)(nLen MA

15、X_BUFFER_LENGTH)FALSE;EnterCriticalSection(&m_cs);m_nLength=nLen;LeaveCriticalSection(&m_cs);TRUE;LPBYTE CNetIOBuffer:GetCurPos (m_nLength MAX_BUFFER_LENGTH)(m_pbinData+m_nLength);NULL;CNetIOBuffer:operator LPBYTE const m_pbinData;CNetIOBuffer:GetReLen ;MAX_BUFFER_LENGTH-m_nLength;BOOL CNetIOBuffer:IsEmpty const m_nLength 0;const CNetIOBuffer&CNetIOBuffer:operator=(const CNetIOBuffer&buffSrc)(&buffSrc!=this)CopyData(buffSrc,buffSrc.GetLength);*this;上篇文章:RSA算法基础-实战 下篇文章:用Asp写个加密和解密类

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁