实验一、tcp服务器端程序设计_第1页
实验一、tcp服务器端程序设计_第2页
实验一、tcp服务器端程序设计_第3页
实验一、tcp服务器端程序设计_第4页
实验一、tcp服务器端程序设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一、TCP 服务器端程序设计 一、实验目的 1、学习 Linux 操作系统的基本命令用法。 2、掌握在 Linux 操作系统如何编译和编辑 C 程序; 3、掌握在 Linux 操作系统中编写服务器端程序的基本方法。 二、实验内容 2.1 进入 Linux 操作系统 本实验是第一次使用 Linux 操作系统,熟悉 Linux 操作系统并能熟练地使用 Linux 操 作系统的基本命令是接下来所有实验的基本前提,因此建议读者能够反复使用下列命令, 直到熟记在心为止。 本次使用的 Linux 是安装在 VMWare 虚拟机中,所以使用 Linux 不会破坏任何原有 Windows 操作系统,所以请大家放心、大胆使用。启动程序管理器中的 VMWare 软件,界 面如 1-1 所示。 图 1-1、VMWare 启动界面 选择 VMWare 工具栏上的绿色箭头启动 Linux 操作系统,这时候您的电脑上实际上相 当于两台电脑分别运行不同的操作系统。它们共享了物理设备,尤其要注意鼠标的变化。 两个操作系统的鼠标切换为【Ctrl+Alt】键。注意 VMWare 软件的左下则状态栏有提示信息。 Linux 操作系统的登录界面如图 1-2 所示。 图 1-2、Linux 登录界面 1、 登录用户和密码 本机设置了两个用户名: root 和 tx,密码均为 123456,其中 root 为操作用户,tx 为普通 用户,两者的操作权限有着很大的区别,某些 Linux 命令与用户的权限有着极大的关系, 所以切记使用每条命令时的用户权限,平时建议使用普通用户,但在本次实验中我们以 root 用户登录。注意:Linux 是严格区分字母大小写的。登录成功后的选择进入终端,终 端是输入各种 Linux 命令的窗口。 图 1-3、Linux 终端软件 2.2、Linux 终端 Linux 终端就是一个 Linux 图形软件,如图 1-4 所示具有菜单栏等窗口软件常有的特征。 例如可以调整窗口内容字体的大写。在终端的提示符下可以输入各种 Linux 命令,例如 ls。从 Linux 命令提示符可以看出当前登录用户名。 图 1-4、Linux 终端 图 1-5、Linux 命令提示符 2.2 在 Linux 终端中编写第一个 C 程序 1、 查看当前文件目录命令 pwd 使用 pwd 命令可以查询当前目录,如下: rootlocalhost root#pwd (回车) /root 表明当前 root 用户所在的目录是/root,其中/表示根目录。 2、改变目录命令 cd 现在要求进入用 tx 用户主目录, Linux 在创建每个普通用户时自动为该用户创建一个 目录,该目录称为此用户的主录用,一般放在/home 目录下。 rootlocalhost root#cd /home/tx rootlocalhost tx#pwd /home/tx 3、编写 C 源程序 编写第一个 C 程序,在 Linux 命令行下执行 emacs 命令,emacs 是一款类似于 Windows 操作系统的记事本软件。如图 1-6 所示。 图 1-6、emacs 软件界面 现在在 emacs 软件中输入如下 C 代码 /* * * 注释: hello.c C 程序严格区分字母大小写 * */ #include int main () printf(“hello world!n”); return 0; 4、 编译、运行 C 程序 将上述文件保存为 hello.c,选择 emacs 菜单file中的Save Buffer As ( 第一次保存当 前输入信息),并在下图 1-7 中红色框标注的地方输入 hello.c 文件名,然后就可以关闭 emacs。在 linux 命令行中输入下列命令对 C 程序进行编译,首先使用 ls 命令查看当前目录 中的文件。 其中 gcc 命令为编译 c 程序的编译软件, -o 表示输出编译后的执行文件,这里为 hello。编译成功后使用 ls 命令发现目录中多了一个 hello 文件,执行 hello 文件用./hello, 其中./表示当前目录。 图 1-7、保存文件 至此我们完成了一个在 Linux 操作系统中最简单的 C 程序编辑、编译、运行步骤。 2.3 TCP 服务器程序设计 1、请在 emacs 文本编辑器中编写下列程序。 (注意,下面是不同的 4 个文件) /* * 文件名: TCPServer.c * */ #include #include #include #include #include #include #include #include “Practical.h“ static const int MAXPENDING = 5; / Maximum outstanding connection requests int main(int argc, char *argv) if (argc != 2) / Test for correct number of arguments DieWithUserMessage(“Parameter(s)“, “); in_port_t servPort = atoi(argv1); / First arg: local port / Create socket for incoming connections int servSock; / Socket descriptor for server if (servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) #include #include void DieWithUserMessage(const char *msg, const char *detail); void DieWithSystemMessage(const char *msg); void PrintSocketAddress(const struct sockaddr *address, FILE *stream); bool SockAddrsEqual(const struct sockaddr *addr1, const struct sockaddr *addr2); int SetupTCPServerSocket(const char *service); int AcceptTCPConnection(int servSock); void HandleTCPClient(int clntSocket); int SetupTCPClientSocket(const char *server, const char *service); enum sizeConstants MAXSTRINGLENGTH = 128, BUFSIZE = 512, ; #endif / PRACTICAL_H_ /* * 文件名: TCPServerUtility.c * */ #include #include #include #include #include #include “Practical.h“ void HandleTCPClient(int clntSocket) char bufferBUFSIZE; / Buffer for echo string / Receive message from client ssize_t numBytesRcvd = recv(clntSocket, buffer, BUFSIZE, 0); if (numBytesRcvd 0) / 0 indicates end of stream / Echo message back to client ssize_t numBytesSent = send(clntSocket, buffer, numBytesRcvd, 0); if (numBytesSent #include void DieWithUserMessage(const char *msg, const char *detail) fputs(msg, stderr); fputs(“: “, stderr); fputs(detail, stderr); fputc(n, stderr); exit(1); void DieWithSystemMessage(const char *msg) perror(msg); exit(1); 2、 编译、运行 编译运行命令如下,因为客户端程序尚未完成,所以我们不能看到服务器的运行结果, 但您会发现服务器停止不动了,也就是我们所说的阻塞了。如果发现程序错误,必须修改 错误后重新进行编译。 rootlocalhost tx#gcc o serv TCPServer.c msg.c TCPSer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论