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