VC++下实现Socket编程方法

VC++下实现Socket编程方法

ID:41037383

大小:59.00 KB

页数:7页

时间:2019-08-14

VC++下实现Socket编程方法_第1页
VC++下实现Socket编程方法_第2页
VC++下实现Socket编程方法_第3页
VC++下实现Socket编程方法_第4页
VC++下实现Socket编程方法_第5页
资源描述:

《VC++下实现Socket编程方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、VC++下实现Socket编程方法 利用Socket编程是一类典型的网络通信程序,特别是在实时性要求比较高的项目中,Winsock编程方法是非常实用的。下面介绍在VC6.0环境下开发Winsock程序的方法。这里并没有直接应用MFC提供的CSocket类,这是因为考虑到对于类而言,其成员函数调用必然是完全阻塞方式的,因此只能用于人工线程中。基于这种思想,可以在CObject类基础上派生一个套接字类,其使用方式为阻塞方式,虽然增加了使用的条件,但可以保证其正常工作,而不会出现不加控制地使用CSocket对象带来的冲突现象。下面首先将具体介绍有关的套接字类的定义,新

2、创建的套接字功能主要通过调用CSocket的相关操作实现。1套接字类CBlockingSocket首先需要定义此套接字类,在类中设置了一个属性变量:SOCKETm_hSocket;m_hSocket表示套接字的句柄。另外还构造了一组方法,其功能与CSocket类是对应的,下面以创建、监听、连接建立和消息的接收和发送为例,介绍其实现方法,。l        创建创建套接字即要求创建相应的连接,缺省类型为面向连接的流,具体实现为:voidCBlockingSocket::Create(intnType){ASSERT(m_hSocket==NULL);if((m_h

3、Socket=socket(AF_INET,nType,0))==INVALID_SOCKET){thrownewCBlockingSocketException("创建套接字");}}l        监听Listen函数完成监听连接的任务,在实现时要求最多有10个连接请求排队,这在一般的应用中是完全足够的。voidCBlockingSocket::Listen(){ASSERT(m_hSocket!=NULL);if(listen(m_hSocket,10)==SOCKET_ERROR){thrownewCBlockingSocketException("L

4、isten");}}l        建立连接连接的实际建立可以由Connect实现,同样地,缺省的建立方式为面向连接的流。voidCBlockingSocket::Create(intnType){ASSERT(m_hSocket==NULL);if((m_hSocket=socket(AF_INET,nType,0))==INVALID_SOCKET){thrownewCBlockingSocketException("创建套接字");}}l        发送消息Send函数的作用是将数据块按一个消息发送,参数pch即为发送的消息,nSize为消息长度,n

5、Secs可以限制操作时间。如果客户方取消读操作,则返回值将小于指定消息长度。intCBlockingSocket::Send(constchar*pch,constintnSize,constintnSecs){ASSERT(m_hSocket!=NULL);FD_SETfd={1,m_hSocket};TIMEVALtv={nSecs,0};if(select(0,NULL,&fd,NULL,&tv)==0){thrownewCBlockingSocketException("发送超时");}if((intnBytesSent=send(m_hSocket,p

6、ch,nSize,0))==SOCKET_ERROR){thrownewCBlockingSocketException("发送");}returnnBytesSent;}此外,如果数据块比较大,可以将数据块分成多个消息发送,此工作由函数Write完成。具体实现时将通过循环调用Send函数来实现部分消息发送,通过对局部量nBytesThisTime和nBytesSent的维护,保证整个数据块的正常发送。intCBlockingSocket::Write(constchar*pch,constintnSize,constintnSecs){intnBytesSen

7、t=0,nBytesThisTime;constchar*pch1=pch;do{nBytesThisTime=Send(pch1,nSize-nBytesSent,nSecs);nBytesSent+=nBytesThisTime;pch1+=nBytesThisTime;}while(nBytesSent

8、onstintnSecs

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

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

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