1、Linux网络编程实验指导书Linux网络编程实验指导书辽宁科技大学软件学院2015年8月30日实验一 TCP数据发送与接收【实验目的】 1、熟练掌握套接字函数的使用方法。 2、应用套接字函数完成基本TCP通信,实现服务器与客户端的信息交互。 【实验学时】 4学时 【实验内容】 实现一个服务器与一个客户之间通讯。具体功能如下: (1)服务器端: 服务器端等待客户的连接,一旦连接成功,则显示客户的IP地址、端口号; 循环接收客户发来的信息并在终端上显示,同时在信息前加入序号并返回给客户端;当从客户接收到bye后不再发送给各户并退出程序。 (2)客户端: 根据用户从终端输入的服务器IP地址及端口号
2、连接到相应的服务器; 连接成功后,循环从终端输入信息,并将信息发送给服务器,再从服务器接收信息,并显示在终端上。 当从终端输入bye并发送给服务器后,程序退出。 实验二 UDP数据发送与接收【实验目的】 1、熟练掌握套接字函数的使用方法。 2、应用套接字函数完成基本UDP通讯,实现服务器与客户端的文件传送 【实验学时】 4学时 【实验内容】 要求: (1)客户可以从服务器下载文件、或向服务器上传文件。 (2)客户可向服务器发送多种指令:DOWNLOAD、UPLOAD、YES、NO、START、END、SHUTDOWN、CONTENT、OKDOWLOAD格式:DOWLOAD filename表示
3、从服务器下载filename文件,如果服务器存在该文件,返回YES,否则返回NO;客户接收如果是YES,可发送START表示开始下载,之后,服务器将文件传送给客户,客户接收并保存;UPLOAD格式:UPLOAD filename表示向服务器上传filename文件,服务器发送NO表示拒绝接收。服务器发送START表示开始传送,之后向服务器传输文件;END:表示文件传送结束SHUTDOWN:表示通讯结束,双方退出。 实验三 多进程服务器【实验目的】 1、熟练掌握进程的创建与终止方法;2、熟练掌握进程间通信方法;2、应用套接字函数完成多进程服务器,实现服务器与客户端的信息交互。【实验学时】 4学时
4、【实验内容】通过一个服务器实现最多5个客户之间的信息群发。服务器显示客户的登录与退出;客户连接后首先发送客户名称,之后发送群聊信息;客户输入bye代表退出,在线客户能显示其他客户的登录于退出。实现提示:1、服务器端:服务器进程称之为主进程,主进程创建一个转发子进程和最多5个通信子进程。主进程与转发子进程之间: 信号量(初值5,主进程接受一个客户连接后执行P操作判断是否超过5,转发子进程有一个客户退出后执行V操作,并发消息队列标识符) 命名管道SERVER(转发子进程将可用的消息队列标识符写入管道,主进程从管道中读取消息队列标识符)转发子进程与通信子进程之间: 命名管道CLIENT(通信子进程向
5、命名管道写入客户端发来的消息,转发子进程从管道中读取消息并发送给对应的客户端) 消息队列(转发子进程将客户发来的信息通过消息队列发送给每个通信子进程)(1)主进程:从转发子进程获取一个可用的消息队列标识符;接收客户连接请求,如果连接数超过最大连接数,向客户发送退出标志,否则发送OK标志;每接受一个连接,创建一个通信子进程并将连接socket、消息队列标识符、客户地址传递给通信子进程。(2)通信子进程:创建一个子进程负责从消息队列中读取消息,发送给客户。通信子进程负责接收客户发来信息,通过命名管道CLIENT发送给转发子进程;若信息为用户名,附带消息队列、客户地址发送给转发子进程;若信息为退出,
6、终止子进程,程序结束 (3)转发子进程: 创建5个消息队列; 维护客户信息表:消息队列、客户名、客户IP、客户端口、状态。 从命名管道CLIENT中读取通信子进程发来的消息,消息类型为:用户名、退出及一般信息; 若为用户名,依据消息队列在更新客户信息表,状态为可用; 若为一般信息,将信息转换后写入可用客户的消息队列,等待其他通信子进程读取; 若为退出,在客户信息表中状态设为不可用,执行信号量V操作,并将可用客户的消息队列标识符写入到命名管道SERVER; 2、客户端: 根据用户从终端输入的服务器IP地址及端口号连接到相应的服务器; 连接成功后,先发送客户名称; 创建一个子进程负责接收服务器发来
7、的信息,并显示; 主进程循环从终端输入信息,并将信息发送给服务器; 当发送给服务器为bye后,关闭子进程,程序退出。 实验四 多线程服务器【实验目的】 1、熟练掌握线程的创建与终止方法;2、熟练掌握线程间通信同步方法;3、应用套接字函数完成多线程服务器,实现服务器与客户端的信息交互。【实验学时】 4学时【实验内容】通过一个服务器实现最多5个客户之间的信息群发。服务器显示客户的登录与退出;客户连接后首先发送客户名称,之后发送群聊信息;客户输入bye代表退出,在线客户能显示其他客户的登录于退出。 实现提示: 1、服务器端: 主线程: 定义一个全局客户信息表:socket描述符、客户名、客户IP、客
8、户端口、状态。 主线程循环接收客户连接请求,如果连接数超过最大连接数,向客户发送EXIT标志,否则发送OK标志; 否则,将socket描述符、客户IP、客户端口号写入客户信息表,并修改状态为1表示可用; 同时创建一个通信线程并将客户索引号index传递给通信线程。 通信线程: 通信子进程负责接收客户发来信息并显示,同时查询全局客户信息表,向状态为1的客户发送接收的信息。 若信息为用户名,修改全局客户信息表中index客户的用户名name。 若信息为退出,终止线程,程序结束。 2、客户端: 根据用户从终端输入的服务器IP地址及端口号连接到相应的服务器; 连接成功后,先发送客户名称; 创建一个线程
9、负责接收服务器发来的信息,并显示,当接收的长度小于等于0时终止线程; 主进程循环从终端输入信息,并将信息发送给服务器; 当发送给服务器为bye后,程序退出。 实验五 名字与地址解析【实验目的】 1、理解从域名到IP以及从IP到域名的解析过程;2、熟练从域名到IP以及从IP到域名的解析方法;【实验学时】 2学时【实验内容】(1)编写一段程序解析TCP中1100号端口代表的服务; (2)编写一段程序解析UDP中1100号端口代表的服务; (3)编写一段程序解析http、dns、ftp、smtp、pop3协议使用的端口号。 实验六 组播通信【实验目的】 1、熟练掌握线程的创建与终止方法;2、应用组播技术实现组播通信。 【实验学时】 2学时【实验内容】应用组播通信和多线程实现多人聊天室程序。每个用户通过组播向组播组发送信息,同时可以接收来自组播组任何成员发来的组播信息,从而实现客户之间的信息交互。 每个客户输入用户名,在每次组播发送前将用户名作为信息前缀发送。 提示: 主线程:socket;输入组播地址、端口号、用户名;创建子线程(组播地址、端口号);设置组播发送;循环输入信息并发送,当输入bye时结束循环关闭子线程并退出组播 子线程(组播地址、端口号):socket;加入组播组;bind;循环接收并显示
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1