1、数 据 通 信 与 计 算 机 网 络课程设计报告指导老师;苏军学 院:计算机科学学院专 业:2013级电子信息科学与技术组 长:学号:组 员: 学号:2组 员: 学号:基于Socket在线数据传输的设计与实现摘 要近年来随着计算机技术的飞速发展,特别是Internet技术的发展,已经深刻的改变到了人们生活的方方面面。这时过去的种种陈旧的通讯方式,都已经不能满足现代生活的需要。人们希望能够用更低廉的价格,更加方便快捷的方式,来实现即时通讯。这时开发一套基于Internet技术的网络数据传输系统变得尤为重要。Internet是目前世界上最大的计算机互联网络,它遍布全球,并将世界各地不同规模和大小
2、的网络连接成为一个整体。目前基于Internet的应用已经非常多了,例如网上收发邮件、网上购物、网上看电影等等。这些应用无不在改变人们的生活传统生活方式。本课题主要研究的是基于Socket的数据传输软件,此软件分为服务器程序和客户端程序,本课题的目标是能实现用户在客户端与服务器端传递信息。主要研究开发内容是:熟悉系统开发平台,探索在此开发平台下,利用Socket编程技术、TCP/IP协议等进行聊天软件的实际开发。一 课程设计性质:独立课设二 课程设计目的和任务:1、掌握数据通信和计算机网络的基本原理2、掌握数据通信和计算机网络设计、分析和实现方法3、提高学生编制网络通信程序、网络应用服务程序的
3、能力三课程设计基本内容及要求:基本内容:网络数据通信的基本方法及实现。基本要求:根据选定的项目,课题小组成员认真查阅相关资料,发挥学生的主体作用,提出设计方案,老师参与,进行讨论和分析,最终确定设计方案。在此基础上,合理分工,协同完成项目的设计与实现,最后完成课程设计的报告撰写。四课程设计平台基于 Eclipse集成开发环境五课程设计原理:1. TCP/IP协议TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网络协议,该协议是Internet最基本的协议,简单地说,就是由底层的IP协议和TCP协议组
4、成的。TCP/IP协议的开发工作始于70年代,是用于互联网的第一套协议。 (1)TCP/IP参考模型 TCP/IP协议的开发研制人员将Internet分为五个层次,以便于理解,它也称为互联网分层模型或互联网分层参考模型,如下所示:物理层:对应于网络的基本硬件,这也是Internet物理构成,即我们可以看得见的硬设备,如PC机、互连网服务器、网络设备等,必须对这些硬设备的电气特性作一个规范,使这些设备都能够互相连接幷兼容使用。 网络接口层:它定义了将资料组成正确帧的规程和在网络中传输帧的规程,帧是指一串资料,它是资料在网络中传输的单位。 互联网层:本层定义了互联网中传输的“信息包”格式,以及从一
5、个用户通过一个或多个路由器到最终目标的信息包转发机制。 传输层:为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。 应用层:它定义了应用程序使用互联网的规程。 (2)网际协议IP Internet 上使用的一个关键的底层协议是网际协议,通常称IP协议。我们利用一个共同遵守的通信协议,从而使 Internet 成为一个允许连接不同类型的计算机和不同操作系统的网络。要使两台计算机彼此之间进行通信,必须使两台计算机使用同一种语言。通信协议正像两台计算机交换信息所使用的共同语言,它规定了通信双方在通信中所应共同遵守的约定。 计算机的通信协议精确地定义了计算机在彼此通信过程的所有细节。例如,每
6、台计算机发送的信息格式和含义,在什么情况下应发送规定的特殊信息,以及接收方的计算机应做出哪些应答等等。 网际协议IP协议提供了能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另一个地点传送二进制数据,就可以使用IP协议加入 Internet 了。 如果希望能在 Internet 上进行交流和通信,则每台连上 Internet 的计算机都必须遵守IP协议。为此使用 Internet 的每台计算机都必须运行IP软件,以便时刻准备发送或接收信息。 IP协议对于网络通信有着重要的意义:网络中的计算机通过安装IP软件,使许许多多的局域网络构成了一个庞大而又
7、严密的通信系统。从而使 Internet 看起来好象是真实存在的,但实际上它是一种幷不存在的虚拟网络,只不过是利用IP协议把全世界上所有愿意接入 Internet 的计算机局域网络连接起来,使得它们彼此之间都能够通信。 (3)传输控制协议TCP 尽管计算机通过安装IP软件,从而保证了计算机之间可以发送和接收资料,但IP协议还不能解决资料分组在传输过程中可能出现的问题。因此,若要解决可能出现的问题,连上 Internet 的计算机还需要安装TCP协议来提供可靠的幷且无差错的通信服务。 TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机
8、连接时,TCP协议会让它们建立一个连接、发送和接收资料以及终止连接。 传输控制协议TCP协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。即使在 Internet 暂时出现堵塞的情况下,TCP也能够保证通信的可靠。 众所周知, Internet 是一个庞大的国际性网络,网络上的拥挤和空闲时间总是交替不定的,加上传送的距离也远近不同,所以传输资料所用时间也会变化不定。TCP协议具有自动调整超时值的功能,能很好地适应 Internet 上各种各样的变化,确保传输数值的正确。 因此,从上面我们可以了解到:IP协议只保证计算机能发送和接收分组资料,而TCP协
9、议则可提供一个可靠的、可流控的、全双工的信息流传输服务。 综上所述,虽然IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,幷且在功能上也是互补的。只有两者的结合,才能保证 Internet 在复杂的环境下正常运行。凡是要连接到 Internet 的计算机,都必须同时安装和使用这两个协议,因此在实际中常把这两个协议统称作TCP/IP协议。2 UDP协议UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要
10、求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消
11、息的情况。3.Socket编程Socket 接口是访问 Internet 使用得最广泛的方法。 如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201, 此时在另一台主机或同一台主机上执行ftp 202.120.127.201,显然无法建立连接。因202.120.127.201 这台主机没有运行FTP服务软件。同样, 在另一台或同一台主机上运行浏览软件 如Netscape,输入http:/202.120.127.201,也无法建立连接。现在,如果在这台主机上运行一个FTP服务软件(该软件将打开一个Socket, 并将其绑定到21端口),再在这台主机上运行一个Web
12、 服务软件(该软件将打开另一个Socket,并将其绑定到80端口)。这样,在另一台主机或同一台主机上执行ftp 202.120.127.201,FTP客户软件将通过21端口来呼叫主机上由FTP 服务软件提供的Socket,与其建立连接并对话。而在netscape中输入http:/202.120.127.201时,将通过80端口来呼叫主机上由Web服务软件提供的Socket,与其建 立连接并对话。 在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,
13、象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。在Java中所谓Socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络
14、连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。重要的Socket API:.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法可以参见JDK-1.3文档。Accept方法用于产生阻塞,直到接受到一个连接,并且返回一个客户端的Socket对象实例。阻塞是一个术语,它使程序运行暂时停留在这个地方,直到一个会话产生,然后程序继续;通常阻塞是由循环产生的。 getInputStream方法获得网络连接
15、输入,同时返回一个InputStream对象实例。 getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。 注意:其中getInputStream和getOutputStream方法均可能会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。 服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用Sock
16、et对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Sock
17、et也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。六课程设计实现代码:1. 服务器端的设计代码服务器端需要完成三大功能,分别是与客户端建立连接、监听客户端消息以及操作数据库。Client.javapackage udp;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import java.util.Scanner;/* * 基于UDP的通信 * author Administrator * */publi
18、c class Server public static void main(String args) Scanner scanner = new Scanner(System.in);/创建服务端的DatagramSocketDatagramSocket server = null;try server = new DatagramSocket(8088);/创建一个100字节的数组byte recvBuf = new byte100;/创建数据报,将获取的数据填满给定的数组DatagramPacket recvPacket= new DatagramPacket(recvBuf, recv
19、Buf.length);/监听8088端口的数据,并将发送过来的数据存入数据报server.receive(recvPacket);/返回数据报中保存的收到的字节的字节数组String str = new String(recvPacket.getData(),0,recvPacket.getLength();/数据报的getLength()方法用于返回接收到的实际字节量System.out.println(客户端说:+str);System.out.println(请输入要对客户端说的话!);String message = scanner.nextLine();byte sendBuf =
20、 message.getBytes();/* * 通过之前客户端发送过来的数据报我们还可以得知 * 对方的地址以及使用的端口 */InetAddress address= recvPacket.getAddress();int port = recvPacket.getPort();DatagramPacket sendPacket= new DatagramPacket(sendBuf,sendBuf.length,address,port);server.send(sendPacket); catch (Exception e) finally2.客户端设计的代码Server.javapa
21、ckage udp;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import java.util.Scanner;/* * 基于UDP的通信 * author Administrator * */public class Server public static void main(String args) Scanner scanner = new Scanner(System.in);/创建服务端的DatagramSocketDatagramSocket server = null;try server
22、 = new DatagramSocket(8088);/创建一个100字节的数组byte recvBuf = new byte100;/创建数据报,将获取的数据填满给定的数组DatagramPacket recvPacket= new DatagramPacket(recvBuf, recvBuf.length);/监听8088端口的数据,并将发送过来的数据存入数据报server.receive(recvPacket);/返回数据报中保存的收到的字节的字节数组String str = new String(recvPacket.getData(),0,recvPacket.getLength
23、();/数据报的getLength()方法用于返回接收到的实际字节量System.out.println(客户端说:+str);System.out.println(请输入要对客户端说的话!);String message = scanner.nextLine();byte sendBuf = message.getBytes();/* * 通过之前客户端发送过来的数据报我们还可以得知 * 对方的地址以及使用的端口 */InetAddress address= recvPacket.getAddress();int port = recvPacket.getPort();DatagramPac
24、ket sendPacket= new DatagramPacket(sendBuf,sendBuf.length,address,port);server.send(sendPacket); catch (Exception e) finally七.课程设计总结:本文通过采用Java的Socket技术,开发了一个简单的网络数据传输软件。在该系统中实现了网络数据传输的一些基本功能,可以满足大部门用户在组建局域网后最为其公司的内部交流工具之用。在完成本课程设计时,我曾经遇到了很多的困难,既有专业知识上的,也有心理因素上的。不过所幸的是,在面对这些困难的时候,我没有退缩而是选择了激流勇进,最终在指导老师是在聊天消息框的界面上过于简单。不过我相信我以后会将该设计的功能继续增强,从而达到商业软件的标准。八.参考文献:1 Java编程思想M,机械工业出版社,2007.62 30天学通Java项目案例开发M,电子工业出版社,2009.7,2008.123 Java TCP/IP Socket编程(原书第2版) M,机械工业出版社,2009.1 4 Java程序设计:一种跨学科的方法 M,清华大学出版社,2009.55 Java程序设计教程 M,机械工业出版社,2008.96 Java从入门到精通 M,清华大学出版社,2008.87 Java网络编程技术与实践M,清华大学出版社,2008.8
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100