基于重叠模型的通信程序设计

基于重叠模型的通信程序设计

ID:11995643

大小:97.00 KB

页数:15页

时间:2018-07-15

基于重叠模型的通信程序设计_第1页
基于重叠模型的通信程序设计_第2页
基于重叠模型的通信程序设计_第3页
基于重叠模型的通信程序设计_第4页
基于重叠模型的通信程序设计_第5页
资源描述:

《基于重叠模型的通信程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、集美大学计算机工程学院实验报告课程名称:TCP/IP协议分析与编程班级:实验成绩:实验项目名称:基于重叠模型的通信程序设计学号:上机实践日期:2016-05-26实验项目编号:10组号:1上机实践时间:2学时一、实验目的了解基于重叠模型通信程序的编写,编译和执行二、实验内容与设计思想编写Win32程序实现基于重叠模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递。客户端向服务器端发送“请输出1000以内斐波那契数列”,服务器回应客户端给出结果。(斐波那契数列特征,F0=0,F1=1,Fn=F(n-1)+F(n-2),n>=2)三、实验使用环境操作系

2、统:MicrosoftWindowsXPSP2编程环境:VisualC++6.0四、实验步骤和调试过程源代码服务器端:#include"stdafx.h"#include"initsock.h"#include#include#defineBUFFER_SIZE1024CInitSockinitSock;//为每个套节字创建一个_SOCKET_OBJ对象typedefstruct_SOCKET_OBJ{SOCKETs;//套节字句柄intnOutstandingOps;//记录此套节字上的重叠I/O数量LPFN_ACCEPTEXl

3、pfnAcceptEx;//扩展函数AcceptEx的指针(仅对监听套节字而言)}SOCKET_OBJ,*PSOCKET_OBJ;//定义缓冲区对象buffer,记录重叠I/O的所有属性typedefstruct_BUFFER_OBJ{OVERLAPPEDol;//重叠结构char*buff;//send/recv/AcceptEx所使用的缓冲区intnLen;//buff的长度PSOCKET_OBJpSocket;//此I/O所属的套节字对象intnOperation;//提交的操作类型#defineOP_ACCEPT1#defineOP_READ2#defineOP

4、_WRITE3SOCKETsAccept;//用来保存AcceptEx接受的客户套节字(仅对监听套节字而言)_BUFFER_OBJ*pNext;}BUFFER_OBJ,*PBUFFER_OBJ;HANDLEg_events[WSA_MAXIMUM_WAIT_EVENTS];//I/O事件句柄数组intg_nBufferCount;//上数组中有效句柄数量PBUFFER_OBJg_pBufferHead,g_pBufferTail;//记录缓冲区对象组成的表的地址//申请套节字对象和释放套节字对象的函数PSOCKET_OBJGetSocketObj(SOCKETs){PS

5、OCKET_OBJpSocket=(PSOCKET_OBJ)::GlobalAlloc(GPTR,sizeof(SOCKET_OBJ));if(pSocket!=NULL){pSocket->s=s;}returnpSocket;}voidFreeSocketObj(PSOCKET_OBJpSocket){if(pSocket->s!=INVALID_SOCKET)::closesocket(pSocket->s);::GlobalFree(pSocket);}//申请_BUFFER_OBJ对象的函数,每次调用重叠I/0函数前需要申请PBUFFER_OBJGetBuff

6、erObj(PSOCKET_OBJpSocket,ULONGnLen){if(g_nBufferCount>WSA_MAXIMUM_WAIT_EVENTS-1)returnNULL;PBUFFER_OBJpBuffer=(PBUFFER_OBJ)::GlobalAlloc(GPTR,sizeof(BUFFER_OBJ));if(pBuffer!=NULL){pBuffer->buff=(char*)::GlobalAlloc(GPTR,nLen);pBuffer->ol.hEvent=::WSACreateEvent();pBuffer->pSocket=pSocket

7、;pBuffer->sAccept=INVALID_SOCKET;//将新的BUFFER_OBJ添加到列表中if(g_pBufferHead==NULL){g_pBufferHead=g_pBufferTail=pBuffer;}else{g_pBufferTail->pNext=pBuffer;g_pBufferTail=pBuffer;}g_events[++g_nBufferCount]=pBuffer->ol.hEvent;}returnpBuffer;}//释放_BUFFER_OBJ对象的函数voidFreeBufferObj(

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

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

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