- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
南昌大学实验报告
姓名:林泓宇
学号:8000115196
邮箱地址:Littlered_Lynn@
专业班级:计科154班
实验日期:2018.5.26
课程名称:Linux程序设计
实验项目名称
Socket It Out
实验目的
The purpose of the lab
• Understanding the mechanism of socket
• Trying to learn some C
• Understanding the process of network programming
实验基础
CentOS 6.6,Oracle VirtualBox
实验步骤
Task 1
Socket it
•Program a C/S communication in one host
•Echo the input from client at the server side
•Using socket interface to implement such process
•Make a real pair using Linux C
Task 2
Easier Job on the Way
•Repeat the task in the last slide, using Golang
实验数据或结果
首先将老师给出的代码复制过来,写成C文件
编译两个文件,会发现报出大量错误,这里首要问题就是没有csapp.h这个文件,并
且老师的实验要求中也没有给出,所以只能自行到网上下载,下载之后解压,发现还有
一个捆绑的文件csapp.c ,并且在这个csapp.h的头文件中,包含了老师在实验介
绍中提到的一些函数,说明了这个头文件的正确性
再次编译,还是报错,提示没有这个头文件,原来是我自己手贱把
#include csapp.h
改成了
#include
这样会导致一个什么样的情况了,就是这个程序会到系统的头文件库里去找这
个csapp.h ,这个库位于/usr/include之下,这里就直接改回来便可,程序会自动寻
找当前目录下的对应头文件来进行引用
然后进行编译,可以看到,头文件的问题已经没有了,但是又出现了新的问题,提示线
程相关的错误,这个错误我到网上去查了一下,是因为本程序中含有线程相关的语句,
在编译的时候需要在后面加上一条语句,成为
gcc lab6_client.c -o client -lpthread
这样的形式
再看服务器端的代码,也是报错,这里错误很愚蠢,是因为复制过来的代码出现了一些
格式问题,自动换了行,编译器没能识别出来,退格还原就可以了
这里继续报错,说是没有定义echo这个方法,我找了一下老师给的实验需求,发现给
出了这个echo函数,复制过来进行定义,就可以通过编译了
打开两个终端,一个终端运行服务端,一个终端运行客户端,可以看到,已经成功建立
连接,并且可以传输数据,但是这个运行结果并不美观,跟老师给的要求也不太一样:
1. 客户端输入了信息,会自动重复输出一遍用户的输入
2. 服务器端不能显示用户输入信息的内容,只是给出一个信息大小
要解决这两个问题,我首先仔细阅读了一下源程序,发现了
Fputs(buf,stdout)
这条语句就是导致重复输出一遍用户输入的始作俑者,于是把它注释掉
同时,我在服务器端文件找到输出客户端传过来信息大小的部分,在里面加上一句
printf(%s\n,buf)
其中buf就是客户端输入的文字内容,这样就解决了上述两个问题了
重新运行,发现结果和预计的一样
接下来就是使用Golang语言完成Socket编程了,关于这个任务,我在网上查阅了
一些资料,最后决定参考golang socket 服务端与客户端内的写法。
但是这位兄贵的程序中,是由程序预先在客户端输入内容进行传送,并且只能传送
一次数据,所以并不符合老师的要求,但是他的服务端和客户端的连接创建是非常
清晰且正确的,所以应用过来,自己修改了一些部分,代码如下,这里我的主要思
想就是实现一个简单的函数嵌套调用,在连接建立函数中设置一个send函数,这
个send函数就由用户端自己输入内容,而在main函数中,不停的循环传送数据,
并设置一个flag变量来确定是否结束循环
最后是运行结果,由此可见结果是正确的
实验思考
这次的实验是做socket有关的编程,分为服务端和用户端两个方面进行,在实验过程
中遇到了很多问题,但都通过询问老师和查询资料得以解决,这次的实验不
文档评论(0)