中科大计算机网络课上机指导

上传人:东*** 文档编号:269981345 上传时间:2022-03-24 格式:DOC 页数:14 大小:85KB
返回 下载 相关 举报
中科大计算机网络课上机指导_第1页
第1页 / 共14页
中科大计算机网络课上机指导_第2页
第2页 / 共14页
中科大计算机网络课上机指导_第3页
第3页 / 共14页
中科大计算机网络课上机指导_第4页
第4页 / 共14页
中科大计算机网络课上机指导_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《中科大计算机网络课上机指导》由会员分享,可在线阅读,更多相关《中科大计算机网络课上机指导(14页珍藏版)》请在金锄头文库上搜索。

1、计算机网络课上机指导一、实验目的BSD socket目前已经被广泛移植到各个平台,因此熟悉了BSD socket的编程界面,对以后的学习、工作都有很重要的现实意义。了解BSD socket编程界面,熟悉socket相关的各种API的使用,如socket, bind, listen, accept, connect, send, recv, sendto, recvfrom, htonl, ntohl, htons, ntohs等。了解阻塞式IO、非阻塞式IO概念与控制。二、实验基础每个socket的应用,通常都有如下的API的使用:socket 用于生成一个套节字accept 接受一个连接请求

2、,用于服务器端的编程connect 发起一个连接请求,用于客户端的编程send/sendto发送信息recv/recvfrom接收信息select多路复用调用bind将主机的地址/端口信息与某个socket相关联listen进入监听状态close关闭一个socketshutdown断开连接fcntl设置socket的选项htons主机序到网络序的短整型ntohs网络序到主机序的短整型通常的服务器端的编程:通常的客户端编程socketsocketbindlistenacceptconnectsend/recvsend/recvshutdownshutdownclosecloseIPv6是对现有的

3、Ipv4的扩展,在编程界面上,都和v4的类似,只是地址部分有变化。三、编程上机题目(注意:请用C语言编程)1. 写简单的socket应用程序,应用的内容和形式可以自己决定。可以是基于client/server结构的,也可以是对等结构的。目的是熟悉基本的socket应用程序的编写。基本要求:使用基本的API函数。服务器端至少能够支持一个客户,客户端和服务器端能够互相发送/接收信息。可以选择udp或者tcp协议。例1:简单的回显程序,即客户端输入什么,服务器端能够回送什么例2:两个人的聊天程序,即你一言,我一语的那种。2. 套接字Socket应用。熟悉unix环境下socket编程的几种编程的使用

4、模式,阻塞式IO的多客户端支持,非阻塞IO的使用等。基本要求:使用select来实现多个客户端的多路复用,至少支持4个以上的客户端。可以结合题目1一起做。例1:可以写一个聊天室,功能能够实现多个人同时登录,进行聊天。登录时提示输入昵称,不允许重复的登录,进入聊天室以后可以说话,每个里面的人都能看到。例2:可以写一个HTTP的Proxy,功能是实现简单的Proxy的功能,可以通过你的应用程序,进行HTTP的访问。注意支持多个客户端。3. 编写简单多播应用程序。应用的环境不限。可以是视频流或者音频流或者其他形式的内容。基本的要求:使用基本的API函数。客户端和服务器端之间的交互可以使用如下的结构:

5、server-文件应用程序- client |_网络_|文件可以是视频/音频流。至少能有两个以上的客户端能够接收到同步的信息并且播放。例1:音频多播可以以音频文件为输入流,循环地通过服务程序播送;客户端从网络接收,并能够传递给播放软件。例2:视频多播 同上,以视频文件为输入流。四、参考书籍Unix网络编程电子工业出版社Linux网络编程清华大学出版社Windows网络编程机械工业出版社ftp:/202.38.75.11/EBooks/Unix_Programming/Windows网络编程技术特别致谢向计算机科学技术系2000级研究生杨琛同学表示特别感谢。附录:1. 简单的说明linux下编写

6、socket的应用程序比较简单,如果有不太清楚的调用,可以直接通过man socket等的使用来观察应该包含的头文件,函数的原型,以及正常时应该的返回值。编译通常的程序可以使用(g)cc source.c o outfile来进行,如果是c+的程序,g+ source.c o outfile运行: $./outfile 回车后台执行 $./outfile &回车Windows下面的编程稍微麻烦一点,需要安装MSDN,里面也有详细的每个函数的说明。在Platform SDK: WinSock的部分。要编写Winsock的应用程序应该包含头文件 winsock.h。然后在工程的设置的Link里面加

7、上winsock32.lib。或者在程序中写上#pragma comment(lib,”winsock32”)并且,每个Winsock的应用程序都要进行Winsock的初始化,WSAStartup/WSACleanup。具体的可以参考202.38.75.11上的电子书。2. 部分中文材料:TCP/IP编程接口介绍Linux/Unix:Socket函数库Linux Socket函数库是从Berkeley大学开发的BSD UNIX系统中移植过来的。BSD Socket接口是在众多Unix系统中被广泛支持的TCP/IP通信接口,Linux下的Socket程序设计,除了微小的差别之外,也适用于大多数其

8、它Unix系统。Socket的使用和文件操作比较类似。如同文件的读、写、打开、关闭等操作一样,TCP/IP网络通信同样也有这些操作,不过它使用的接口不是文件描述符或者FILE*,而是一个称做Socket的描述符。类似于文件操作,对于Socket,也通过读、写、打开、关闭操作来进行网络数据传送。同时,还有一些辅助的函数,如域名/IP地址查询、Socket功能设置等。 以下是函数分类介绍(此介绍选自Linux manpage,不当之处,请参阅原文):1. Socket操作: Socket():分配Socket #include #include int socket(int domain, int

9、 type, int protocol);socket()函数分配一个Socket句柄,用于指定特定网络下、使用特定的协议和数据传送方式进行通信。Socket接口是不仅仅局限于TCP/IP的,但是由于TCP/IP的广泛使用,它们几乎被完全等同起来了。Socket句柄分配以后,如果要开始TCP通信,还需要建立连接。根据需要,可以主动地建立连接(通过connect())和被动地等待对方建立连接(通过listen()),在连接建立后才能使用读写操作通过网络连接进行数据交换。参数说明:domain:domain参数选择通信中使用的协议族,也就是网络的类型,可以是以下之一:AF_UNIX (UNIX内部

10、协议)AF_INET (ARPA Internet协议,也就是TCP/IP协议族,亦即我们实验中所使用的)AF_ISO (ISO协议)AF_NS (Xerox Network Systems协议)AF_IMPLINK (IMP host at IMP link layer)type :数据传送的方式,可以是以下之一:SOCK_STREAM:保证顺序的、可靠传送的双向字节数据流,最为常用,也是TCP连接所使用的方式。SOCK_DGRAM:无连接的、不保证可靠的、固定长度(通常很小)的消息传送。SOCK_SEQPACKET:顺序的、可靠的双向固定长度的数据包传送,只用于AF_NS类型的网络中。SO

11、CK_RAW:原始的数据传送,适用于系统内部专用的网络协议和接口,和SOCK_RDM一样,只能由超级用户使用。SOCK_RDM:可靠的数据报传送,未实现。Protocol:protocol参数指定通信中使用的协议。在给定Socket的协议族和传送类型之后,一般情况下所使用的协议也就固定下来,如下表所示,此时protocol参数可使用缺省值0;但如果还有多个协议供选择,则必须使用protocol参数来标识。协议族(仅考虑IP协议族)传送类型protocol参数常量(/usr/include/linux/in.h)协议类型AF_INETSOCK_STREAMIPPROTO_TCPTCPSOCK_D

12、GRAMIPPROTO_UDPUDPSOCK_RAWIPPROTO_ICMPICMPSOCK_RAWIPRROTO_RAW(raw)返回值:正常执行时,返回Socket描述符;否则,返回-1,错误状态在全局变量errno中。close():关闭Socket #include int close(int fd); Socket和文件描述符的关闭操作都是使用这个函数。参数说明:fd:Socket描述符。返回值:正常时返回0,-1表示出错。bind():给Socket指定本地地址 #include #include int bind(int sockfd, struct sockaddr *my_a

13、ddr, int addrlen);bind函数给已经打开的Socket指定本地地址。这个函数的使用有以下两种情况:如果此Socket是面向连接的,而且此Socket在连接建立过程中处于被动的地位, 即己方程序使用listen函数等待对方建立连接,对方用connect函数来向此Socket建立连接,这种情况下,必须用bind给此Socket设定本地地址。在己方使用listen函数时,除指定Socket描述符之外,该Socket必须已经用bind函数设定好了本地地址(包括IP地址和端口号),这样,系统在收到建立连接的网络请求时,才能根据请求的目的地址,识别是通向哪个Socket的连接,从而己方才

14、能用此Socket接收到发给此Socket地址的数据包。不指定Socket的本地地址,就无法将此Socket用于连接建立和数据接收。如果此Socket用于无连接的情形,同样也要求给该Socket设定本地地址,这样,以后系统从网络中接收到数据后,才知道该送给哪个Socket及其相对应的进程。参数说明:sockfd:Socket描述符。Addrlen:my_addr结构的长度。my_addr:用于侦听连接请求的本地地址。struct sockaddr是一个通用型的结构,不仅包含TCP/IP协议的情况,同时也是为了适合于其它网络,如AF_NS。由于它的这种通用性,它只是定义了一个一般意义上的存储空间,如/usr/include/linux/socket.h中所示:struct sockaddr unsigned short sa_family; /* address family, AF_xxx */char sa_data14; /* 14 bytes of protocol address */;当使用TCP/IP协议(即Internet协议)时,可用如下的struct等价地代替struct sockaddr(/usr/include/linux/in.h):

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 网络与通信

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号