欢迎来到天天文库
浏览记录
ID:3671171
大小:97.00 KB
页数:15页
时间:2017-11-22
《基于重叠模型的通信程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、集美大学计算机工程学院实验报告课程名称:TCP/IP协议分析与编程班级:实验成绩:实验项目名称:基于重叠模型的通信程序设计学号:上机实践日期:2016-05-26实验项目编号:10组号:1上机实践时间:2学时一、实验目的了解基于重叠模型通信程序的编写,编译和执行二、实验内容与设计思想编写Win32程序实现基于重叠模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递。客户端向服务器端发送“请输出1000以内斐波那契数列”,服务器回应客户端给出结果。(斐波那契数列特征,F0=0,F1=1,Fn=F(n-1)+F(n-2),n>=2)三、实验使用环境操作系统:Microsof
2、tWindowsXPSP2编程环境:VisualC++6.0四、实验步骤和调试过程源代码服务器端:#include"stdafx.h"#include"initsock.h"#include#include#defineBUFFER_SIZE1024CInitSockinitSock;//为每个套节字创建一个_SOCKET_OBJ对象typedefstruct_SOCKET_OBJ{SOCKETs;//套节字句柄intnOutstandingOps;//记录此套节字上的重叠I/O数量LPFN_ACCEPTEXlpfnAcceptEx;//扩展函数Ac
3、ceptEx的指针(仅对监听套节字而言)}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_WRITE3SOCKETsAccept;//用来保存Acc
4、eptEx接受的客户套节字(仅对监听套节字而言)_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){PSOCKET_OBJpSocket=(PSOCKET_OBJ)::GlobalAl
5、loc(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_OBJGetBufferObj(PSOCKET_OBJpSocket,ULONGnLen){if(g_nBufferCo
6、unt>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;pBuffer->sAccept=INVALID_SOCKET;//将新的BUFFER_OBJ添加到列表中if(g_p
7、BufferHead==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(
此文档下载收益归作者所有