欢迎来到天天文库
浏览记录
ID:34535921
大小:115.19 KB
页数:4页
时间:2019-03-07
《实验七 远程进程 socket 通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验七远程进程socket通信(一)实验目的系统v的IPC通信机制只支持同一台计算机内的进程间通信。BSDUNIX,系统V和Solaris等操作系统所提供的Socked(插座,套接字)是最重要的进程通信工具,可支持广域网上异种机器之间的通信,包括各类UNIX系统和使用最为广泛的个人计算机。通过本实验能使学生进一步理解套接字通信的基本原理和机制,通过编制一个实用的异机socket通信程序,深入掌握套接字编程的方法和细节。(二)实验题目分别编一个客机程序和服务器程序,首先建立客户程序与服务器之间正确的socket连结,然后利用send和recv函数,客户程序将一
2、个较长的文本文件(如几k字节)中的数据发送给服务器。要求服务器全部正确地接收到所有的数据(一个也不能少),并将其存入一个文件。(三)测试要求如有可能,最好在异种机之间测试程序。比较服务器收到的文件中的数据和客户机原先文件中数据是否完全相同。文本文件测试完成后,可再用二进制文件测试。(四)实验报告要求给出数据结构的说明,画出程序框图。程序中要加上注释。对测试结果加以分析,如有错误,找出产生错误的原因,提出改进方案。(五)附:socket进阶1.套接字(插座)的功能套接字实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联
3、系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。有人说:“在UNIX系统中,任何东西都是一个文件。”这句话描述了这样一个事实:在UNIX系统中,任何对I/O的操作,都是通过读或写一个文件描述符来实现的。所以,如果你想通过Internet和另外一个程序通信的话,你将会是通过一个文件的描述符来实现的。我们可以用write()和read()对套接字描述符进行操作的,但是,通过使用send()和recv()函数,你可以对网络数据的传输进行更好的控制。2.Socket是怎样在网络上传输数据的数据被分成一个一个的包(Packet),包的数据被第一层协议(
4、比如TFTP协议)加上第一层协议数据。然后整个包(包括内部加入的TFTP信息头)被下层协议再次包装(比如UDP),在这之后数据包会再次被下层协议包装(比如IP协议),最后被最底层的硬件层(物理层)包装上最后一层信息(Ethernet信息头)。当接收端的计算机接收到这个包以后,硬件首先剥去数据包中的Ethernet信息头,然后内核再剥去IP和UDP信息头,最后把数据包提交给TFTP应用程序,由TFTP剥去TFTP信息头,最后得到原始数据。OSI模型共分为七层。从下到上依次为:物理层、数据链路层、网络层、运输层、会话层、表示层和应用层。这个模型是最一般的模型,但
5、是在UNIX中,真正用到的模型层次是下面这样子的:应用层(Telnet、FTP等等)主机间对话层,即传输层(TCP和UDP)网络层(IP和路由)网络底层(相当于OSI模型中网络、数据链路和物理层)对流式套接字我们所需要做的是调用send()函数来发送数据。UNIX系统内核中已经建立了TransportLayer和InternetLayer。硬件负责NetworkAccessLayer。3.基本转换函数(1)网络字节顺序因为每一个机器内部对变量的字节存储顺序不同(有的系统是高位在前,低位在后,而有的系统是低位在前,高位在后),而网络传输的数据顺序是一定要统一的
6、。所以对与内部字节表示顺序和网络字节顺序不同的机器,一定要对数据进行转换(比如IP地址的表示,端口号表示)。而且内部字节顺序和网络字节顺序相同的机器也要调用转换函数,但是真正转换还是不转换是由系统函数自己来决定的。(2)有关的转换函数我们通常使用的有两种数据类型:短型(两个字节)和长型(四个字节)。下面介绍的这些转换函数对于这两种的无符号整型变量都可以进行正确的转换。如果你想将一个短型数据从主机字节顺序转换到网络字节顺序,有这样一个函数:它以“h”开头,代表“主机”;紧跟着它的是“to”,代表“转换到”;然后是“n”,代表“网络”;最后是“s”,代表“短型数
7、据”。h-to-n-s,就是htons()函数。下面给出套接字字节转换函数列表:htons()主机字节顺序转换为网络字节顺序(对无符号短型进行操作)htonl()主机字节顺序转换为网络字节顺序(对无符号长型进行操作)ntohs()网络字节顺序转换为主机字节顺序(对无符号短型进行操作)ntohl()网络字节顺序转换为主机字节顺序(对无符号长型进行操作)在structsocketaddr_in中的sin_addr和sin_port的字节顺序都是网络字节顺序,而sin_family却不是网络字节顺序。这是因为sin_addr和sin_port是从IP和UDP协议层
8、取出数据的,而在IP和UDP协议层,是直接和网络相关
此文档下载收益归作者所有