




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络实践设计报告学院: 计算机 班级: 成教2012业余 教师: 李领治 学号: 姓名: 成绩: 实验目的:掌握Winsock2.0套接字编程技术的基本方法。实验要求:运用TCP/IP Winsock2.0套接字编程技术,使用VC编写一个面向连接通信的服务端程序与客户端程序,服务器先与端口3000绑定,然后等待客户连接,连接成功后就可与客户端互相收、发信息。交互中,通信任一方只要发送 bye, 通信过程便自动结束。实验源程序:服务器程序:#pragma comment (lib, Ws2_32.lib) /Winsock 2 函数库/-#include #include #include /Winsock 2 函数头文件/-bool InitSocket(); int main(int, char*)struct sockaddr addr;int len;bool over;char msg255;SOCKET sock, sersock;if( !InitSocket() ) return 0; /加载初始化 Winsock 2 动态链接库 Ws2_32.dllsock = socket( AF_INET,SOCK_STREAM,0 ); /创建监听的流套接口 if( sock=INVALID_SOCKET ) /不能创建,返回printf(不能创建Socket!n);getch();WSACleanup( ); /卸载Winsock 2动态链接库Ws2_32.dllreturn 0;/设置本服务器IP地址和端口号(sockaddr_in*)&addr)-sin_family = AF_INET; /AF_INET:使用Internet 协议(sockaddr_in*)&addr)-sin_port = htons(3000); /服务器端口号3000(sockaddr_in*)&addr)-sin_addr.s_addr = inet_addr(127.1.1.1); /主机地址/把套接口与地址绑定bind(sock,&addr,sizeof(addr);/服务进程准备接收套接口上的连接请求listen(sock,1); /监听方式,准备接收连接请求:1-允许等待队列中的连接请求1个/接受网络连接,生成新的套接口sersock标识这一连接printf(等待客户连接!n);len = sizeof(addr);sersock = accept( sock,&addr,&len );/从等待队列中检取连接请求,如队列空则进程阻塞等待;/如不空,则接受客户连接,使用返回连接套接口sersock与该客户连接。/原套接口sock可继续监听其它客户请求。if(sersock=INVALID_SOCKET) /若套接口sersock 出错DWORD err = WSAGetLastError();char txt100;sprintf(txt,error when accept!-errno:%d,err);printf(txt);getch();closesocket(sock); /关闭监听套接口sockWSACleanup( ); /卸载Winsock 2动态链接库Ws2_32.dllreturn 0;printf(有客户连接!n输入bye通信结束n);over = false; /状态设置为未结束/与客户交互会话,直至任一方打入bye后退出循环doprintf(n等待对方用户输入信息.);len = recv ( sersock,msg,200,0 ); /接收对方信息printf(n对方输入:%s,msg); /显示对方信息if( strcmp(msg,bye)=0 ) /若对方信息为bye就结束通信break;printf(n本方回答:);gets(msg); /键入本方信息if( strcmp(msg,bye)=0 ) over = true; /若本方发出bye就结束通信send ( sersock,msg,strlen(msg)+1,0 ); /将本方键入信息发给对方 while( !over );closesocket(sersock); /关闭连接套接口closesocket(sock); /关闭监听套接口printf(nn会话结束,按任一键返回n);getch();WSACleanup( ); /卸载 Winsock 2 动态链接库Ws2_32.dllreturn 0;/-/下述函数加载初始化Winsock 2 动态链接库 Ws2_32.dllbool InitSocket() WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 0 ); /Wiinsock2.0版err = WSAStartup( wVersionRequested, &wsaData ); /加载if ( err != 0 ) /没有Winsock 2 动态链接库 Ws2_32.dllprintf(没有Windows Socket动态库!n);getch();return false;if ( LOBYTE( wsaData.wVersion ) != 2 | /不是Winsock 2.0HIBYTE( wsaData.wVersion ) != 0 ) printf(需要Windows Socket 2!n);getch();WSACleanup( ); /卸载 Winsock 动态链接库return false;return true;客户端程序:#pragma comment (lib, Ws2_32.lib) /Winsock 2 函数库/-#include #include #include #include #include /Winsock 2 函数头文件/-bool InitSocket(); int main(int , char*)int type;SOCKET sock; struct sockaddr addr; int len,portno;int err;char msg255;bool over;if( !InitSocket() ) return 0; /加载初始化 Winsock 2 动态链接库 Ws2_32.dlltype = SOCK_STREAM; sock = socket( AF_INET,type,0 ); /创建客户端流套接口if( sock=INVALID_SOCKET ) /不能创建,返回printf(不能创建Socket!);getch();WSACleanup( ); /卸载Winsock 2动态链接库Ws2_32.dllreturn 0; / 以下输入对方服务器IP地址(sockaddr_in*)&addr)-sin_family = AF_INET; / Internet 协议printf(输入服务器地址(x.x.x.x):); gets(msg);(sockaddr_in*)&addr)-sin_addr.s_addr = inet_addr(msg); / inet_addr()将点分十进制IP地址串转换为u_long类型/ 以下输入对方服务器端口号printf(输入对方服务器端口号(3000):);gets(msg);if(msg0=0x00) portno=3000; /如果直接回车,就采用默认端口号3000else portno=atoi(msg);(sockaddr_in*)&addr)-sin_port = htons( portno ); / htons():从短整数的主机字节顺序转换为网络字节顺序/ 以下与对方服务器连接/ 在使用面向连接协议 (TCP)时,必须与服务器连接成功后,/ 才可通信;另外,若使用无连接的协议(UDP) ,则可以直/ 接向对方发数据、无需连接, 但面向连接收、发数据时用/ 的send()和recv()要换成无连接用的函数 sendto()和recvfrom() printf(与服务器连接.!);len = sizeof(addr);err = connect( sock,(sockaddr*)&addr,len ); /连接if( err=SOCKET_ERROR ) /若连接失败printf(连接失败!);getch();WSACleanup( ); /卸载Winsock 2动态链接库Ws2_32.dllreturn 0;printf(成功连接到服务器!n若输入bye则通信结束n);over = false; /状态设置为未结束/ 以下为客户与服务器会话交互,直至输入或收到bye,则/ 退出循环,结束doprintf(nn本方输入:);gets(msg);if( strcmp(msg,bye)=0 ) over = true; /输入bye则结束通信send ( sock,msg,strlen(msg)+1,0); /发送信息if(over) break; printf(等待服务器响应.n);len = recv ( sock,msg,200,0 ); /接收信息,接收缓冲区长200 msglen=0; /在接收串变量尾添结束符0 if( strcmp(msg,bye)=0 ) over = true; /收到bye则结束通信printf(对方回答:);printf(msg); /显示接收信息while( !over );/以下关闭套接口,卸载Winsock 2动态链接库closesocket(sock); /关闭客户套接口printf(n会话结束,按任一键返回n);getch();WSACleanup( ); /卸载Winsock 2动态链接库Ws2_32.dllreturn 0;/-/下述函数加载初始化Winsock 2 动态链接库 Ws2_32.dllbool InitSocket() WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 2, 0 ); /Wiinsock2.0版err = WSAStartup( wVersionRequested, &wsaData ); /加载if ( err != 0 ) /没有Winsock 2 动态链接库 Ws2_32.dllpri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025临床执业医师经典例题(夺分金卷)附答案详解
- 发货快递合同(标准版)
- 保险公司保险合同(标准版)
- 2024公务员(国考)考前冲刺练习试题及完整答案详解(各地真题)
- 2025年智慧港口智能港口与城市协同发展报告
- 2025年康复医疗器械市场需求洞察与前沿产品创新策略报告
- 西藏自治区2025年初中学业水平考试历史试卷含答案
- 2025年传媒互联网行业市场前景及投资研究报告:AI应用新消费
- 巡察办工作流程课件
- DeepSeek技术赋能企业财务数字化转型的框架与策略
- 光伏发电工程竣工最终验收报告
- 2025-2030中国篮球运动鞋行业市场发展趋势与前景展望战略研究报告
- 发改价格〔2007〕670号建设工程监理与相关服务收费标准
- 2025年小学生科普知识竞赛练习题库及答案(200题)
- 传媒行业创新案例小红书
- 《美妆类电商产品销量影响因素实证研究13000字(论文)》
- T-JSQX 0016-2024 无人驾驶配送装备通.用技术要求
- 科技前沿下的生物医药研发实验室创新研究
- 《铝及铝合金》课件
- 2025年摩托车用锁行业深度研究分析报告
- 临床问诊技巧及病历书写要求(临床诊断课件)
评论
0/150
提交评论