已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WinSock编程实验报告班 级:10网工三班 学生姓名:谢昊天 学号:1215134046实验目的和要求:实验目的1、了解WinsockAPI2、深刻领会Winsock编程原理3、学会使用Winsock创建简单的TCP服务器以及客户机实验要求1. 整个通信过程参照TCP/IP通信方式;2. 实现整个TCP/IP通信的基本模型;3. 完成基本的界面设计和事件响应;4. 服务器可以同时和多个用户对话,可以同时恢复多个用户;5. 保证信息传输的畅通;6. 服务器可以依次和多个用户对话。实验内容与分析设计:编写一个基于某种I/O方法的TCP服务器和TCP客户机:能够实现模拟C/S模型的通信方式,服务器端负责信息的接收,并能够返回给客户端相应的消息;客户机负责向服务器发送信息。注:可以模拟教材95页面向连接的TCP Socket应用程序编程实例。实验步骤与调试过程:1.打开Visual c+ 6.0编程环境;2.点击文件-新建、选择建立新的工程;选择Win32 Console Application选项建立工程名为“服务器”的一个空工程;3. 继续点击文件-新建、选择建立新的文件;选择C+ Source File选项建立在“服务器”工程下的名为“服务器”的文件;4.编辑源程序-调试;(1)定义头文件和常量,声明两个SOCKET对象,初始化SOCKET环境;(2)创建用于监听的SOCKET环境;(3)设置服务器SOCKET的地址,并绑定socket server 到本地地址,在socket server 上进行监听,而后调用accept()函数等待来自客户端的连接请求;(4)在服务器与客户机之间发送和接收数据;(5)当服务器程序接收到来自客户端的“quit”字符串后,将退出循环并释放占用的资源;5.在组建选项中点击执行【服务器.exe】(或者Ctrl+F5)执行程序;6.运行服务器查看服务器是否处于监听状态。7.再次打开Visual c+ 6.0编程环境;8.点击文件-新建、选择建立新的工程;选择Win32 Console Application选项建立工程名为“客户端”的一个空工程;9. 继续点击文件-新建、选择建立新的文件;选择C+ Source File选项建立在“客户端”工程下的名为“客户端”的文件;10.编辑源程序-调试;(1)在主程序中定义头文件和常量并声明变量,初始化socket 环境并创建用于通信的socket;(2)设置socket地址并连接到服务器;(3)在服务器与客户机之间发送和接收数据;(4)当程序退出while循环时将释放占用的资源;11.在组建选项中点击执行【服务器.exe】(或者Ctrl+F5)执行程序;12. 运行服务器程序后再次运行客户端程序在客户端的命令窗口中执行netstat-nao.查看客户端程序的状态。实验结果:1.实现了在服务器与客户端之间发送和接受数据。2.运行服务器后,服务器处于监听状态3. 实现了接受来自客户端的请求。4.实现模拟C/S模型的通信方式,服务器端负责信息的接收,并能够返回给客户端相应的消息;客户机负责向服务器发送信息。疑难小结:通过本次试验,了解了socketb编程的一些基础知识,学习到了用socket 编写 服务器应用程序。学习到了设置服务器socket 地址,用socket 编写客户端应用程序,以及如何接受来自客户端的请求。从而使我对TCP Socket服务器应用程序有了进一步的了解,通过动手实现其TCP Socket服务器在TCP端口9990上进行监听,实现CP Socket客户端自动连接到指定服务器的TCP端口9990,然后提示用户输入向服务器发送的字符串,更加深刻的理解了TCP Socket服务器与客户端的特点。同时,在实验过程中,回顾书本上的理论知识,巩固了我的知识。主要算法和程序清单:服务器:#include #include #pragma comment(lib,WS2_32.lib)#define BUF_SIZE 64int main(int argc, TCHAR* argv)WSADATA wsd;SOCKET sServer;SOCKET sClient;int retVal;char bufBUF_SIZE;if(WSAStartup(MAKEWORD(2,2),&wsd) !=0)printf(WSAStartup failed !n);return 1;sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET =sServer)printf(socket failed !n);WSACleanup();return -1;SOCKADDR_IN addrServ;addrServ.sin_family = AF_INET; addrServ.sin_port = htons(9990);addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY);retVal = bind(sServer,(const struct sockaddr*)&addrServ,sizeof(SOCKADDR_IN);if(SOCKET_ERROR = retVal)printf(bind failed !n);closesocket(sServer);WSACleanup();return -1;retVal = listen(sServer,1);if(SOCKET_ERROR = retVal)printf(listen failed !n);closesocket(sServer);WSACleanup();return -1;printf(TCP Server start.n);sockaddr_in addrClient;int addrClientlen = sizeof(addrClient);sClient = accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);if(INVALID_SOCKET = sClient)printf(accept failed !n);closesocket(sServer);WSACleanup();return -1;while(true)ZeroMemory(buf,BUF_SIZE);retVal = recv(sClient,buf,BUFSIZ,0);if(SOCKET_ERROR = retVal)printf(recv failed !n);closesocket(sServer);closesocket(sClient);WSACleanup();return -1;SYSTEMTIME st;GetLocalTime(&st);char sDateTime30;sprintf(sDateTime,%4d-%2d-%2d%2d%:2d:%2d,st.wYear,st.wMonth,st.wHour,st.wMinute,st.wSecond);printf(%s,Recv From Client %s:%d :%sn,sDateTime,inet_ntoa(addrClient.sin_addr),addrClient.sin_port, buf);if(strcmp(buf,quit) = 0)retVal = send(sClient,quit,strlen(quit),0);break;elsechar msgBUF_SIZE;sprintf(msg,Message received - %s, buf);retVal = send(sClient, msg, strlen(msg),0);if(SOCKET_ERROR = retVal)printf(send failed !n);closesocket(sServer);closesocket(sClient);WSACleanup ();return -1;closesocket(sServer);closesocket(sClient);WSACleanup();system(pause);return 0;客户端:#include #include #include #pragma comment(lib,WS2_32.lib)#define BUF_SIZE 64int main(int argc, TCHAR* argv)WSADATA wsd;SOCKET sHost;SOCKADDR_IN servAddr;char bufBUF_SIZE;int retVal;if (WSAStartup(MAKEWORD(2,2),&wsd) != 0)printf (WSAStartup failed !n);return 1;sHost = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET = sHost)printf(socket failed !n);WSACleanup();return -1;servAddr.sin_family = AF_INET;servAddr.sin_addr.S_un.S_addr = inet_addr(192.168.5.205);servAddr.sin_port = htons(9990);int sServerAddlen = sizeof(servAddr);retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr);if(SOCKET_ERROR = retVal)printf(connect failed !n);closesocket(sHost);WSACleanup();return -1;while(true)printf(Please input a string to send: );std:string str;std:getline(std:cin, str);ZeroMemory(buf,BUF_SIZE);strcpy(buf,str.c_str();retVal = send(sHost,buf,strlen(buf),0);if(SOCKET_ERROR = retVal)printf(send
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年江苏省镇江市中考语文真题卷含答案解析
- 幼儿园保育工作计划总结
- 2025年楚雄市高压电工证理论考试练习题含答案
- 安环部员工2025年度工作总结模版
- 小学六年级语文教师教学工作总结
- 脚手架工程量计算方法
- 2025年市场监督管理局业务考试复习题集及答案解析
- 花卉栽培试题库及答案
- 2025年社区公共卫生服务培训试题集含答案
- 电工三级(高级工)试题含答案
- 2025年大学大一(法学)法理学试题及答案
- 胆囊癌课件教学课件
- 广西2025年高等职业教育考试全区模拟测试 能源动力与材料 大类试题及逐题答案解说
- 2026江苏省公务员考试公安机关公务员(人民警察)历年真题汇编附答案解析
- 孕妇贫血教学课件
- 超市冷库应急预案(3篇)
- 5年(2021-2025)山东高考生物真题分类汇编:专题17 基因工程(解析版)
- 2025年10月自考00610高级日语(二)试题及答案
- 新华资产招聘笔试题库2025
- 2025年中国潜孔钻机行业细分市场研究及重点企业深度调查分析报告
- 食品经营场所及设施设备清洗消毒和维修保养制度
评论
0/150
提交评论