当前位置:文档之家› 计算机网络 Socket编程实验报告 华中科技大学 HUST

计算机网络 Socket编程实验报告 华中科技大学 HUST

电子与信息工程系
实验报告
实验名称WinSocket编程实验课程名称计算机网络
姓名郭世康学号U201313639
日期20151220 地点南一楼东204 成绩教师刘威
1.实验目的
1.掌握网络应用程序的开发方法;
2.掌握 Client/ Server 结构软件的设计与开发方法
3.掌握 Socket 机制的工作原理
4.实现server-client双向通信、client超时重传过程
2.实验环境
Windows7.0,集成开发环境codeblocks,simple-talk例程代码
3.实验内容与结果
(1)运行simplex-talk 例程,理解代码并观察现象
(2)修改simplex-talk程序,编制duplex-talk程序,支持client和server 的双向通信
程序整体功能:实现客户端与服务器的双向通信。

程序组成及各模块功能:程序由若干模块组成:主要为检查模块,检查是否出错以及是否与服务器/客户端建立了链接;传输数据模块,客户端向服务器发送数据和接受服务器发送的消息以及服务器接收数据及发送数据;关闭连接模块,断开客户端与服务器的链接;
重要的数据结构: WSADATA,hostent,sockaddr_in等数据结构;
程序清单:见附件;
运行及测试结果:
(3)利用windows时间函数,编制一个简单的定时器,模拟client和server之间的stop-and-wait
程序整体功能:实现客户端与服务器之间的stop-and-wait动作,其中延时设置为2s,主要实现方法为server收到client发过来的数据后不回传ACK,导致client 以为server没有收到,然后在延时过后重传数据;
程序组成及各模块功能:程序由若干模块组成,主要为检查模块,检查是否出错以及是否与服务器/客户端建立了链接;传输数据模块,客户端向服务器发送数据和接受服务器发送的消息以及服务器接收数据及发送数据;关闭连接模块,断开客户端与服务器的链接;
重要的数据结构: WSADATA,hostent,sockaddr_in等数据结构;
程序清单:见附件;
运行及测试结果:
4.思考题

5.实验中的问题
在刚开始时示例代码看不懂,弄懂simplex-talk都花了大量的时间和精力。

其中recv、accept、send等函数弄明白参量都花费了大量的精力,然而并没有弄明白其中参量的具体意义,导致现在整个实验做完了都不是很清楚。

代码看的不是很懂,更不要说写代码了。

在同学的帮助下我弄明白了这个程序的的大致模块分布和一些基本的算法思想,并且参考了大量同学的代码,其中还咨询了一些学长和学姐,总算有了一个整个的思路。

然而在开始编写的时候又遇到了麻烦:CodeBlocks下的环境配置。

运行示例代码的时候就出错,上网百度了好久都没有解决。

这个问题就困扰了我大半天的时间,搞得我烦不胜烦,都不想搞了。

最后还是隗巍同学告诉了我lib文件的导入方法及过程,环境配置才得以成功。

在编写代码的过程中,出现了N多次错误,一些函数更是不知道怎么使用,例如send、recv,在参考了同学的代码之后,总算有了一点头绪。

后面服务器接口的使用也困扰了好久,后面学长提醒才知道,服务器用于连接请求和数据传输的端口要分开使用。

服务器开放一个接口(s)用于监听来自客户端的连接请求,在建立连接后,会另外开放一个接口(new_s)用于和客户端通信,而原先的接口则用来处理其他客户端的连接请求。

写了半天,终于写好了,编译链接也没有问题,然而实际运行的时候又崩盘了。

不是client发出结果server收不到就是server 发出结果client收不到。

然后写写改改,改改写写,终于收到,然后运行,结果。

呵呵呵呵,程序卡住,停止运行,当时就想砸电脑,忍住了,又回去看代码哪里错了,找来找去找了半天结果发现有一个printf的输出错了导致程序崩溃,那时候还不确定,试着把它去了结果运行成功,当时的心情就跟吃了人参果一样,全身上下渗透着一种舒爽,恨不得仰天长啸三声。

总之这个实验做成之前有一种想死的感觉,后面解决了问题之后又很爽,不过说实话,整个实验完了之后我还有一种云里雾里的感觉,有好多地方没有很清楚的弄明白,但是结果还是差强人意,最后还是完成了一些要求的功能,还是很开心的。

附件
1. 程序源代码
2. 参考文献列表。

相关主题