计算机网络课程设计--利用Java Sock实现双机通信.docx

上传人:李司机 文档编号:6724946 上传时间:2024-01-10 格式:DOCX 页数:14 大小:34.69KB
返回 下载 相关 举报
计算机网络课程设计--利用Java Sock实现双机通信.docx_第1页
第1页 / 共14页
计算机网络课程设计--利用Java Sock实现双机通信.docx_第2页
第2页 / 共14页
计算机网络课程设计--利用Java Sock实现双机通信.docx_第3页
第3页 / 共14页
计算机网络课程设计--利用Java Sock实现双机通信.docx_第4页
第4页 / 共14页
计算机网络课程设计--利用Java Sock实现双机通信.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《计算机网络课程设计--利用Java Sock实现双机通信.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计--利用Java Sock实现双机通信.docx(14页珍藏版)》请在三一办公上搜索。

1、课程设计报告20142015学年第一学期课程名称计算机网络设计题目利用socket实现双机通信目录摘要-3-1理论基础-3-1.1 套接字通信-3-1.2 JAVASoeKETS编程概述:-4-1.3 JAVA有关概-5-1.3.1 Java中输入/输出流概念-5-1.3.2 JqvqZ皆后-5-1.3.3与Socket有关的java类:-7-2客户机/服务器通信的实现:-9-2.1 服务器端的开发-9-2.2 客户端的开发-9-3程序的实现-9-3.1 服务器端的实现-9-3. 1.1-9-4. 1.2代码如下-9-5. L3运行结果:-9-3.2 客户端的实现:-11-3.2.1-Il-3

2、.2.2代码如下:-11-3.2.3运行结果如下:-13-4打包发布-13-结束语-14-参考文献-14-利用JavaSock实现双机通信摘美:SoCket(套接字)是一种基于TCP/IP的编程接口。它采用客户/服务器通信机制,使客户端和服务器端通过SoCket接口在网络上实现连接和数据交换。它提供了一系列系统调用,使用户可以方便地实现TCP和UDP等多种网络协议的通信。它使用户可以在网络协议上工作而不必对该网络协议有非常深入的了解。这样编写的程序可被迅速移植到任何支持SOCkCt的网络系统中去。本文通过主要利用JaVaSOCkCt来实现双机通信,实现一个简单的服务器,客户端聊天通信工具。并对

3、JavaSocket的实现进行简单的分析和讲解,通过本文以达到对Socket的原理又一个较清晰的认识。关使词:套接字、SoCketSerVer类、客户机/服务器模式1理论基础1.1套接字通信套接字(Socket)是网络通信的基本单元操作,又被称作端口,通常用来实现客户方向和服务器的连接。网上的两个程序通过一个双向的通信连接实现数据的交换,在实现双向通信前链路的每一个端都建立一个SOCket,通过对SOCket的读/写操作实现网络通信功能。套接字是网络通信的一个标准。套接字分为以下三种类型:(1)流套接字这是最常用的套接字类型,TCP/IP协议中的TCP协议用此类接口,它提供面向连接的(建立虚电

4、路),无差错的、发送先后顺序一致的,包长度不限和非重复的网络信包传输。(2)数据报套接字TCP/IP协议族中的UDP协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。(3)原始数据包套接字提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或者用于协议教隐蔽的功能。所有Socket通信程序的基本结构都是一样的,主要有创建Socket,打开连接到SOCket的输入流和输出流、按照一定的协议对Socket进行读写操作。关闭Socket这四个步骤,通过这四

5、个步骤可以完成一般的Socket通信。1.2JAVASockets编程E述:用JaVa语言编程实现SOCket通信,其原理与使用其他语言基本相同,不同之处是:(1)java是跨平台的编程语言,所以用java编写的SOCkCt通信程序可以工作在所有支持TCP/IP协议和java的软硬件平台上;(2)因为JaVa是面向对象的语言,所以在编程中需要使用一些与SoCket有关的系统类,其中用于实现流Socket的类主要有:InetAddreSS类,Socket类,ServerSocket类。InetAddress类的对象用来保存IP地址,Socket类的对象用来创建Socket通信的客户端,SOCke

6、t通信的服务器端则有SerVerSoCket类的对象来实现,用上述几个类就可以很方便的生成用户自己的TCP/IP通信程序。这几个类都属于Java,net包,大部分用来处理网络操作的系统类都包含在这个包中,所以用JAVA编写程序是,一般要在程序开始部分用import语句加载这个包,以便引入这些类。用JAVA语言编写Socket程序的过程就是创建和定义Socket类和ServerSocket类的子类的过程。1.3JAVA有关概1.3.1Java中输入/输出流概念过滤流DataInPUtStrCanI和DataOUtPUtStreanl除了分别作为FilterInputStreani和FiltCrO

7、UtPUtStream的子类外,还分别实现了接口DataInput和DataOUtPUto接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean()readlnt()readLine()readFully()等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如WriteCharO.WriteDoubleODatainPUtStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream可以向所连接的输出

8、流写入基本类型的数据。1.3.2JaVa语言Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。(1)简单性JaVa与C+语言非常相近,但JaVa比C+简单,它抛弃了C+中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的工作。这使程序设计更加简便,同时减少了出错的可能。(2)面向对象Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或

9、超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。Java是一种完全面向对象的程序设计语言,它除了数组、布尔和字符三个基本数据类型外的其它类都是对象,它不再支持全局变量。在JaVa中,如果不创建新类就无法创建程序,Java程序在运行时必须先创建一个类的实例,然后才能提交运行。Java同样支持继承特性,Java的类可以从其它类中继承行为,但Java只支持类的单重继承,即每个类只能从一个类中继承。Java支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。(3)多线程多线程使应用程序可以同时进行不同的

10、操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。(4)分布性JaVa是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。(5)体系结构中立Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。JaVa为

11、了做到结构中立,除生成机器无关的字节码外,还制定了完全统一的语言文本,如JaVa的基本数据类型不会随目标机的变化而变化,一个整型总是32位,一个长整型总是64位。为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。java,lang:一般的语言包。其中包括用于字符串处理、多线程、异常处理和数字函数等的类,该包是实现JaVa程序运行平台的基本包java,util:实用工具包。其中包括哈希表、堆栈、时间和日期等java,io:基于流模型的输入/输出包。该包用统一的流模型实现了各种

12、格式的输入/输出,包括文件系统、网络和设备的输入/输出等java,net:网络包。该包支持TCP/IP协议,其中提供了SoCket、URL和WWW的编程接口java,awt:抽象窗口工具集。其中实现了可以跨平台的图形用户界面组件,包括窗口、菜单、滚动条和对话框等java.applet:支持applet程序设计的基本包(6)安全性用于网络、分布环境下的JaVa必须要防止病毒的入侵,JaVa不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。L3.3与Socket有关的java类:1. InetAddr

13、ess类:用来保存因特网上的IP地址的类,它含有很多成员变量和方法,其中比较常用的有getLocalHost,getByName和getAlIByName,利用它们都可以创建该类的对象,获得一个JaVa程序操纵、处理的IP地址。例如下面的程序段可以根据主机名获取其IP地址:try(InetAddressremoteOP=InetAddress.getByName(v);catch(UnknownHostExceptionexcpt)System,err.printin(Unknownhost:+excpt);)2. Socket类:用来实现TCP/IP通信的端口套接字类,所有希望通过socke

14、t来完成与远程主机进行TCP/IP连接和通信的程序,都必须创建一个SOCkCt类的对象。这个类对象的作用首先是根据远程主机的IP地址和端口号在本地主机创建一个与远程主机的联接;其次,在连接建立后,本地主机程序就可以使用这个类对象提供的输入/输出通道与远程主机实现通信。当一个SoCket被创建时,它所指定的连接也将同时被建立并打开,若连接成功,调用这个socket对象的有关方法就可以实现与远程主机的读写通信操作;若连接失败,则构造函数会抛出例外,表示没有成功创建对象。Socket对象的方法getInputStream()和getOututStream()用来实现程序通过SoCket对远程方的读写

15、。调用getInputStream()方法返回一个抽象的getInputStream对象,可以从远程方读取二进制数据;调用getOutputStream()方法可以返回一个抽象的getOutputStream对象,实现远程方的写入操作。由于getlnputStream和getOutputStream都只是对二进制的原始数据的读写,而不能实现对复杂数据结构的直接操作,所以在实际应用中一般要先对getInputStreamO和getOutputStream()方法返回的输入/输出流作加工变换后再使用。当与SOCket的通信结束时,可用调用close。方法来关闭连接。另外,调用getLocalPor

16、t()和getInetAddress()方法还可获得Socket连接的服务器的有关服务器端口号和IP地址等有关信息。3.ServerSocket类它是Java用来实现TCP/IP通信服务器端程序的主要机制。当一个ServerSocket对象被创建时,程序在本机的指定端口处提供服务并开始监听可能的来自客户端的服务请求。当一个客户请求连接并被接受时,服务器程序将创建一个Socket对象与远程的客户机相连,实现读写通信操作。该类的accept。方法用来等待并接受客户机的一个连接,当这个方法被调用时,服务器进程或线程将处于阻塞状态,直至它监听到有一个客户进程提出服务请求,并与之成功连接,这时方法将返回

17、一个新创建的服务器端的SOCket对象,这个对象已经与远程客户机连接成功,并可以与客户机的SoCket实现读写操作。若服务器可同时提供的连接数超过一个,则服务器程序应该创建一个新的线程来完成与客户机的通信,而保留原有监听线程继续准备接受其它客户机的服务请求。当SerVerS。Cket对象要结束它在特定端口上提供的服务时,可以调用ClOSe()方法实现。2客户机/服务器通信的实现:2.1服务器端的开发(1)服务器端实现对主机某个端口不断监听,并不断接受客户端的连接请求,当受到连接后打印客户的的信息并向客户端完成一次服务。(2)使用readUTF方法的DataInPUtStream处理流提供的方法

18、,功能为读取满足UTF格式的字符串。并使用WriteUTF方法为DataOutputStream处理流提供的方法,功能为写出满足UTF格式的字符。一般在网络中发生消息都在发送端用WriteUTF方法写,在接收端使用readUTF方法读取,这样程序的兼容性强,不容易受到乱码。22客户端的开发(I)客户端用于对某个固定IP的服务器进行连接,接着向服务器发送一条消息,最后接受服务器的返回消息并打印。(2)为了与服务器对应,发送消息还要使用DataInputStream的WriteUTF方法。同时应该注意的两边的首发顺序是互逆的,服务器现售后发,客户端先发后收。3程序的实现3.1服务器端的实现3.L1

19、服务器端用一个类Sa来实现,创建一个SerVerSOCket类的对象,实现对端口9999的不断监听,直到受到客户端的信息。3.L2代码如下:importjava.io.*;.*;importjava.util.*;publicclassSa(publicstaticvoidmain(Stringargs)intcount=O;/Strings二;try(ServerSocketserver=newServerSocket(9999);打印提示信息System.out.PrintIn(服务器已经对9999端口进行监听);服务器循环接受客户断请求/if(!s.equals(end)while(tr

20、ue)Socketsc=server.accept();获取当前连接的输入流,并使用处理流进行封装DataInputStreamdin=newDataInputStream(sc.getInputStreamO);获取当前连接的输出流,并使用处理流惊喜封装DataOutputStreamdout=newDataOutputStream(sc.getOutputStream();打印客户端的信息System,out.print1n(+count)V-=);System,out.Print(“客户端口号:”+sc.getlnetAddress();System,out.println(zz,本地端

21、口:z,sc.getPort();System.out.PrintIn(“客户端信息:zzdin.readUTF();向客户端发送回应信息dout.writeUTF(sc.getlnetAddress()+“您好,现在服务器的时间是:”+(newDate。)+.);关闭流/BufferedReaderin=newBufferedReader(newInputStreamReader(din.read();/s=in.readLine();/s-din.readUTF();din.closeO;dout.closeO;sc.closeO;/else/server,closeO;)catch(Ex

22、ceptione)e.PrintStackTrace();3.L3运行结果:目JProblemsJavadoc遂Declaration里Console区SaJavaApplicationE:Javajdkbinjavaw.exe(2015-1-7下午9:59:57)鬟务篓三窿?9999j二遂行监圻一32客户端的实现:3.2.1客户端主要用Sb类来实现对服务器端的连接功能,创建一个Socket对象实现对服务器的连接。3.2.2代码如下:importjava.io.*;.*;publicclassSb(publicstaticvoidmain(Stringargs)Stringml,m2;ml=z

23、z127.0.0.;2=zzzz;try(创建连接到服务器的Socket对象whiIe(!m2,equals(zzendzz)Socketsc-newSocket(ml,9999);DataInputStreamdin=newDataInputStream(sc.getInputStream();DataOutputStreanidout=newDataOutputStreani(sc.getOutputStream();SySten.out.println(连接成功,请输入:”);BufferedReaderinput=newBufferedReader(newInputStreamRead

24、er(System,in);m2=input.readLine();dout.writeUTF(m2);System,out.printin(din.readUTF();din.closeO;dout.close();sc.close();)catch(Exceptione)e.PrintStackTrace();)3.2.3运行结果如下:JavadocDKEaT-gConsole费xM幽HElYSaJavaApplicationE:Javaidkbinjavaw.exe(2015-1-779:54:29)熟照就9999铝部举Jszszsszszzzzzzss三zzzs三zszszzz三zss

25、sszzzzs127.e.,l.Mt二:57750m:127.e,e,l.撷S:577534打包发布(1)要发布应用程序,需要将应用程序打包。使用jar.exe,可以把应用程序中涉及的类和图片压缩为一个jar文件,这样可以便利发布程序。(2)首先,编写一个清单文件,名为manifest,mf,其代码如下:Manifest-Version:1.0Created-By:1.6.0_06(SunMicrosystemsInc.)Main-class:Sb将清单文件保存到.class所在文件中。使用命令:jarcfmSa.jarmanifest,mf*.class运行后出现Sa.jar文件,(3)编写

26、批处理文件,用来打开Sa.jar文件Cj.batechoofftitle【服务器系统】colorOajava-jarTc.jarpauseCjl.batechoofftitle【客户端程序】colorOajava-jarTcl.jarpause结束语本文通过主要利用JaVaSoCket来实现双机通信,实现一个简单的服务器,客户端聊天通信工具。并对JavaSocket的实现进行简单的分析和讲解,通过本文以达到对Socket的原理又一个较清晰的认识。通过本次课程设计,让我学到了很多东西,对javasocket有了进一步的了解,同时也让我学会了开发系统的结构理念及一些基本步骤。不足之处就是有些东西我掌握的还不够牢固和不够深入,我以后还须加倍努力。由于时间的仓促,加之水平有限,本课程设计中的缺点和不足之处在所难免,敬请老师给予批评指正!参考文献【1】张跃平Java2实用教程清华大学出版社,2005年【2】谢希仁计算机网络第四版电子工业出版社,2003年【3】吴亚峰java6.0编程指南人民邮电出版社,2007年

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号