




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JISHOUUNIVERSITY专业课课程论文题目:利用java套接字实现双机通信作者:学号:所属学院:信息科学与工程学院专业年级:总评分:完成时间:吉首大学信息科学与工程学院利用Java套接字实现双机通信(吉首大学信息科学与工程学院,湖南吉首416000)摘要Socket(套接字)是一种基于TCP/IP的编程接口。它采用客户/服务器通信机制,使客户端和服务器端通过Socket接口在网络上实现连接和数据交换。它提供了一系列系统调用,使用户可以方便地实现TCP和UDP等多种网络协议的通信。它使用户可以在网络协议上工作而不必对该网络协议有非常深入的了解。这样编写的程序可被迅速移植到任何支持Socket的网络系统中去。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电,有的提供110伏交流电,有的则提供有线电视节目。客户软件将插头插到不同编号的插座,就可以得到不同的服务。本文通过主要利用JavaSocket来实现双机通信,实现一个简单的服务器,客户端聊天通信工具。并对JavaSocket的实现进行简单的分析和讲解,通过本文以达到对Socket的原理又一个较清晰的认识。关键词:套接字、
SocketServer类、客户机/服务器模式UsingJavasocketrealizedtwo-machinecommunicationChenwenzhao(CollegeofInformationScienceandEngineering,JishouUniversity,Jishou,Hunan416000)AbstractSocketisaprogramminginterfacebasedonTCP/IP.Itusesaclient/servercommunicationmechanism,sothattheclientandserverthroughtheSocketinterfaceimplementedonanetworkconnectionanddataexchange.Itprovidesasetofsystemcall,theusercanconvenientlyrealizetheTCPandUDPwaitforavarietyofnetworkprotocolcommunication.Itletstheuserinthenetworkprotocoltoworkwithoutthenetworkprotocolhasaveryin-depthunderstanding.ThisprogramcanbequicklyportedtosupportanyoftheSocketnetworksystemin.IntheInternetonthehostgenerallyrunningmultipleservicesoftware,atthesametimeprovideseveralservices.EachoftheserviceswillopenaSocket,andbindtoaport,adifferentportcorrespondingtodifferentservices.SocketasitsEnglishmeaningthat,likeaporoussocket.Ahostcomputerisfullofallkindsofsocketroom,eachreceptaclehasanumber,andsomesocket220voltAC,providesome110voltAC,whileothersprovidecabletelevisionprogram.Theclientsoftwarewillplugintothesocketofdifferentnumber,cangetthedifferentservices.ThispapermainlyusesJavaSockettoachievedouble-machinecommunications,toachieveasimplechatserver,theclientcommunicationtools.AndJavaSockettoachieveasimpleanalysisandexplanation,throughthispapertoachievetheprincipleofSocketandamoreclearunderstandingof.Keywords:socket,SocketServer,client/ServerMode目录第一章引言 51.1课题背景及意义 51.2课题研究现状 51.3研究内容 6第二章理论基础 62.1套接字通信 62.2JAVASockets编程概述: 72.3JAVA有关概述 72.3.1Java语言简介 72.3.2Java中输入/输出流概念 82.3.3与Socket有关的java类: 9第三章客户机/服务器通信的实现: 103.1服务器端的开发 103.2客户端的开发 10第四章程序的实现 114.1服务器端的实现 114.1.1服务器端用一个类Sa来实现 114.1.2运行结果如:图4-1 124.2客户端的实现 124.2.1客户端主要用Sb类来实现对服务器端的连接功能 124.2.2运行结果如:图4-2 13结束语 14参考文献 14第一章引言1.1课题背景及意义计算机网络的发展给计算机产业和整个人类的工作、生活方式带来了巨大的变化,特别是信息技术的发展使一个信息缺乏的时代进入了一个信息爆炸的时代,世界也由于Internet而变小。全球范围内的网络互联给人们的生活和工作带来了方便,人们正享受网络技术带给我们美好生活。但同时某些不法分子利用网络的漏洞非法入侵他人的主机系统,有的利用网络盗取他人个人信息,对他人财产安全造成了重大威胁。据有关资料统计我国每年通过计算网络进行违法行为以30%的速度上升。面对计算机犯罪越来越多的趋势,及网络上日益泛滥的信息垃圾和污染情况,我国政府未雨绸缪,制定了关于互联网络使用的法律法规,网络安全问题面临着重大挑战。目前我国正在进行大规模的现代化经济建设,需要使用自己的网络和信息安全系统来保护自己的网络和信息系统,尤其是对于全国性大型计算机网络而言,必须将网络安全和信息安全放在非常重要的地位上,而从长远角度看,这只能依靠我们自己解决。因此建立网络安全系统是我们现在迫切需求,这项工作对我们来说具有重大的政治和经济意义面对这种形式研究并开发出一种能方便有效的实时监视和捕获可疑网络信息的系统迫在眉睫。随着信息化程度的提高,使我们从一个封闭的环境进入到一个开放的世界,但我们所担心和关心的问题便是网络安全问题,也就是内部网络安全和外部网络安全的问题。本课题正是针对这种情况和需求,对实时数据捕获与网络信息监控提出系统设计方案,并对信息过滤和跟踪的方法和技术进行研究,并且目前基于Java的网络抓包工具比较少见,这便是我的论文研究的意义与目的。1.2课题研究现状Java套接字的应用主要为套接字类(Socket)的使用。Socket和ServerSocket类库位于包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。1.3研究内容在饭店里,菜单上各种具有异国情调的食品映入你的眼帘,于是你要了一份pizza。几分钟后,你用力咀嚼浇着融化的乳酪和其他你喜欢的配料的热pizza。你不知道,也不想知道:侍者从那里弄来了pizza,在制作过程中加进了什么,以及配料是如何获得的。上例中包含的实体有:美味的pizza、接受你定餐的侍者、制作pizza的厨房,当然还有你。你是定pizza的顾客或客户。制作pizza的过程对于你而言是被封装的。你的请求在厨房中被处理,pizza制作完成后,由侍者端给你。你所看到的就是一个客户机/服务器模型。客户机向服务器发送一个请求或命令。服务器处理客户机的请求。客户机和服务器之间的通讯是客户机/服务器模型中的一个重要组成部分,通常通过网络进行。客户机/服务器模型是一个应用程序开发框架,该框架是为了将数据的表示与其内部的处理和存储分离开来而设计的。客户机请求服务,服务器为这些请求服务。请求通过网络从客户机传递到服务器。服务器所进行的处理对客户机而言是隐藏的。一个服务器可以为多台客户机服务。第二章理论基础2.1套接字通信套接字(Socket)是网络通信的基本单元操作,又被称作端口,通常用来实现客户方向和服务器的连接。网上的两个程序通过一个双向的通信连接实现数据的交换,在实现双向通信前链路的每一个端都建立一个Socket,通过对Socket的读/写操作实现网络通信功能。套接字是网络通信的一个标准。套接字分为以下三种类型:(1)流套接字 这是最常用的套接字类型,TCP/IP协议中的TCP协议用此类接口,它提供面向连接的(建立虚电路),无差错的、发送先后顺序一致的,包长度不限和非重复的网络信包传输。(2)数据报套接字TCP/IP协议族中的UDP协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。(3)原始数据包套接字提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或者用于协议教隐蔽的功能。所有Socket通信程序的基本结构都是一样的,主要有创建Socket、打开连接到Socket的输入流和输出流、按照一定的协议对Socket进行读写操作。关闭Socket这四个步骤,通过这四个步骤可以完成一般的Socket通信。2.2JAVASockets编程概述:用Java语言编程实现Socket通信,其原理与使用其他语言基本相同,不同之处是:(1)java是跨平台的编程语言,所以用java编写的Socket通信程序可以工作在所有支持TCP/IP协议和java的软硬件平台上。(2)因为Java是面向对象的语言,所以在编程中需要使用一些与Socket有关的系统类,其中用于实现流Socket的类主要有:InetAddress类,Socket类,ServerSocket类。InetAddress类的对象用来保存IP地址,Socket类的对象用来创建Socket通信的客户端,Socket通信的服务器端则有ServerSocket类的对象来实现,用上述几个类就可以很方便的生成用户自己的TCP/IP通信程序。这几个类都属于J包,大部分用来处理网络操作的系统类都包含在这个包中,所以用JAVA编写程序是,一般要在程序开始部分用import语句加载这个包,以便引入这些类。用JAVA语言编写Socket程序的过程就是创建和定义Socket类和ServerSocket类的子类的过程。2.3JAVA有关概述2.3.1Java语言简介Java语言的优点主要表现在:简单、面向对象、多线程、分布性、安全性等方面。
(1)简单性
Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集,简化了内存管理的工作。这使程序设计更加简便,同时减少了出错的可能。
(2)面向对象
Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。
(3)多线程
多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。
Java程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。
(4)分布性
Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。
(5)安全性
用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。2.3.2Java中输入/输出流概念过滤流DataInputStream和DataOutputStream除了分别作为FilterInputStream和FilterOutputStream的子类外,还分别实现了接口DataInput和DataOutput。接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean()readInt()、readLine()、readFully()等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble()DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream可以向所连接的输出流写入基本类型的数据。2.3.3与Socket有关的java类:(1)InetAddress类:用来保存因特网上的IP地址的类,它含有很多成员变量和方法,其中比较常用的有getLocalHost,getByName和getAllByName,利用它们都可以创建该类的对象,获得一个Java程序操纵、处理的IP地址。(2)Socket类:用来实现TCP/IP通信的端口套接字类,所有希望通过socket来完成与远程主机进行TCP/IP连接和通信的程序,都必须创建一个socket类的对象。这个类对象的作用首先是根据远程主机的IP地址和端口号在本地主机创建一个与远程主机的联接;其次,在连接建立后,本地主机程序就可以使用这个类对象提供的输入/输出通道与远程主机实现通信。Socket对象的方法getInputStream()和getOutputStream()用来实现程序通过Socket对远程方的读写。调用getInputStream()方法返回一个抽象的getInputStream对象,可以从远程方读取二进制数据;调用getOutputStream()方法可以返回一个抽象的getOutputStream对象,实现远程方的写入操作。由于getInputStream和getOutputStream都只是对二进制的原始数据的读写,而不能实现对复杂数据结构的直接操作,所以在实际应用中一般要先对getInputStream()和getOutputStream()方法返回的输入/输出流作加工变换后再使用。当与Socket的通信结束时,可用调用close()方法来关闭连接。(3)ServerSocket类它是java用来实现TCP/IP通信服务器端程序的主要机制。当一个ServerSocket对象被创建时,程序在本机的指定端口处提供服务并开始监听可能的来自客户端的服务请求。当一个客户请求连接并被接受时,服务器程序将创建一个Socket对象与远程的客户机相连,实现读写通信操作。该类的accept()方法用来等待并接受客户机的一个连接,当这个方法被调用时,服务器进程或线程将处于阻塞状态,直至它监听到有一个客户进程提出服务请求,并与之成功连接,这时方法将返回一个新创建的服务器端的Socket对象,这个对象已经与远程客户机连接成功,并可以与客户机的Socket实现读写操作。若服务器可同时提供的连接数超过一个,则服务器程序应该创建一个新的线程来完成与客户机的通信,而保留原有监听线程继续准备接受其它客户机的服务请求。当ServerSocket对象要结束它在特定端口上提供的服务时,可以调用close()方法实现。第三章客户机/服务器通信的实现:3.1服务器端的开发(1)服务器端实现对主机某个端口不断监听,并不断接受客户端的连接请求,当受到连接后打印客户的的信息并向客户端完成一次服务。(2)使用readUTF方法的DataInputStream处理流提供的方法,功能为读取满足UTF格式的字符串。并使用writeUTF方法为DataOutputStream处理流提供的方法,功能为写出满足UTF格式的字符。一般在网络中发生消息都在发送端用writeUTF方法写,在接收端使用readUTF方法读取,这样程序的兼容性强,不容易受到乱码。3.2客户端的开发(1)客户端用于对某个固定IP的服务器进行连接,接着向服务器发送一条消息,最后接受服务器的返回消息并打印。(2)为了与服务器对应,发送消息还要使用DataInputStream的writeUTF方法。同时应该注意的两边的首发顺序是互逆的,服务器现售后发,客户端先发后收。第四章程序的实现4.1服务器端的实现4.1.1服务器端用一个类Sa来实现创建一个ServerSocket类的对象,实现对端口9999的不断监听,直到受到客户端的信息。importjava.io.*;import.*;importjava.util.*;publicclassSa{ publicstaticvoidmain(String[]args){ intcount=0;Strings=""; try{ ServerSocketserver=newServerSocket(9999);//打印提示信息 System.out.println("服务器已经对9999端口进行监听……"); //服务器循环接受客户断请求 if(!s.equals("end")){ while(true){ Socketsc=server.accept(); //获取当前连接的输入流,并使用处理流进行封装 DataInputStreamdin=newDataInputStream(sc.getInputStream()); //获取当前连接的输出流,并使用处理流惊喜封装 DataOutputStreamdout=newDataOutputStream(sc.getOutputStream()); System.out.println("============"+(++count)+"============="); System.out.print("客户端口号:"+sc.getInetAddress()); System.out.println(",本地端口:"+sc.getPort()); System.out.println("客户端信息:"+din.readUTF()); //向客户端发送回应信息 dout.writeUTF(sc.getInetAddress()+"您好,现在服务器的时间是:"+(newDate())+".");//关闭流 BufferedReaderin=newBufferedReader(newInputStreamReader(din.read())); s=in.readLine(); s=din.readUTF(); din.close(); dout.close(); sc.close(); }else server.close(); }catch(Exceptione){ e.printStackTrace();}}}4.1.2运行结果如:图4-1图4-14.2客户端的实现4.2.1客户端主要用Sb类来实现对服务器端的连接功能创建一个Socket对象实现对服务器的连接。importjava.io.*;import.*;publicclassSb{ publicstaticvoidmain(String[]args){ Stringm1,m2; m1="42"; m2=""; try{//创建连接到服务器的Socket对象 while(!m2.equals("end")){ Socketsc=newSocket(m1,9999); DataInputStreamdin=newDataInputStream(sc.getInputStream()); DataOutputStreamdout=newD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省宜春市宜丰中学2023-2024学年高一下学期开学考试 生物 含解析
- 政治备考易错选择题大集结(二)
- 河流地貌的发育高中地理人教版(2019)选择性必修一
- 2025-2030中国白肋烟行业市场全景调研及投资价值评估咨询报告
- 2025年中国弹絮棉市场调查研究报告
- 职业技术学校物联网应用技术专业人才培养方案
- 2025-2030中国月饼行业供需分析及发展前景研究报告
- 2025-2030中国液压变量柱塞泵行业运营规划与投资策略深度研究报告
- 晚期食管癌的治疗
- 2025-2030中国月饼行业发展运行分析及发展前景预测研究报告
- 第一章整式的乘法单元(教学设计)-七年级数学下册同步备课系列(湘教版2024)
- 中考物理复习欧姆定律复习讲解学习
- 上海市2024年中考英语试题及答案
- TMT行业市场发展现状及趋势与投资分析研究报告
- 2024年黑龙江哈尔滨市中考英语真题卷及答案解析
- 【MOOC】道路交通安全-河海大学 中国大学慕课MOOC答案
- 人教版二年级上册英语期中考试卷【3套】
- 2025年湖北省武汉市高考数学模拟试卷附答案解析
- 高中英语时态单选题100道及答案解析
- 【公开课】+纪念与象征-空间中的实体艺术+课件高中美术人美版(2019)美术鉴赏
- GB/T 44588-2024数据安全技术互联网平台及产品服务个人信息处理规则
评论
0/150
提交评论