欢迎来到天天文库
浏览记录
ID:22096854
大小:59.00 KB
页数:6页
时间:2018-10-27
《套接字在网络通信中的应用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、套接字在网络通信中的应用:该文介绍了在Java中使用套接字(Socket)技术进行客户机与服务器的通信,来协同完成一个X络计算任务。程序中还用到了Java的多线程技术,具有一定实用价值。 关键词:套接字;X络通信;应用 中图法分类号:TP311:A:1009-3044(2011)17-4040-04 很少有人在接触过Inter后,能拒绝它的诱惑,大量和多样的信息太吸引人了。能与其他人交流和共享信息,其重要性已是无可争议的了,而能够掌握X络开发工具和编程技巧更是广大X络爱好者趋之若骛的目标。 Java是一种具有面向对象、与平台无关、安全稳定、支持多线程等优良特性的计算机语言,其对
2、X络的驾御能力非常强,特别适合于Inter的应用开发。Java小应用程序(Applet)可以嵌入到X页中执行各种X络应用,而Java提供的套接字技术就为小应用程序与服务器通信提供了便利。 本文程序的工作原理是:在客户端通过ysocket=neysocket建立后,一条通信“线路”就建立起来,它可以使用getInputStream()方法获得一个输入流,并用这个输入流读取服务器放入“线路”的信息(但不能读取自己放入“线路”的信息,这就像打时我们只能听到对方放入线路的声音一样)。mysocket还可以使用getInputStream()方法获得一个输出流,并用这个输出流将信息写入“线路”
3、。 在实际编写程序时,把mysocket使用getInputStream()方法获得的输入流接到另一个数据流上,就可以从这个数据流读取从服务器来的信息。同样把mysocket使用getOutputStream()方法获得的输出流接到另一个DataOutputStream数据流上,就可以向这个数据流写入信息,发送给服务器端。 1.2ServerSocket类 我们已经知道客户负责建立客户到服务器的套接字连接,即客户负责呼叫。因此服务器必须先建立一个等待接收客户套接字的ServerSocket对象。 ServerSocket的构造方法是:ServerSocket(intport)
4、 其中port是一个和客户呼叫的端口号相同的端口号。 建立服务器套接字时也可能发生IOException异常,因此应像下面那样建立接收客户的服务器套接字。 try {ServerSocketserver_socket=ne()方法获得的输出流将指向客户端套接字使用getInputStream()方法获得的输入流;同样,服务器的套接字使用getInputStream()方法获得的输入流将指向客户端的套接字mysocket使用getOutputStream()方法获得的输出流,从而形成双向对接,也就是说,服务器向自己的输出流写入信息时,客户端能在自己的输入流中读取到这个信息,反之亦然
5、。如图1所示。 2把套接字连接放在一个线程中 套接字连接中涉及到输入流和输出流操作,为了不影响我们做其他的事情,应把套接字连接放在一个单独的线程中去进行。另外,服务器端收到一个客户的套接字后,就应该启动一个专门为该客户服务的线程,这样做也为我们处理多客户的并发操作带来了可能。在下面的程序例1中,客户输入三角形三边的长度并发送给服务器,例2中服务器把计算出的三角形面积返回给客户。通常可以将计算量大的工作放在服务器端,客户负责计算量小的工作,实现客户/服务器交互计算,来完成某项任务。 3程序的运行及程序清单 3.1程序的运行 首先将例2的程序编译通过,并在服务器端运行起来,等待客
6、户的呼叫(服务请求),其执行过程中的效果如图3所示;客户端则使用浏览器访问服务器上的例1这个小应用程序(效果如图2所示),这里小应用程序虽然驻留在服务器端,但它需要下载到客户端的浏览器来运行,因此它还是称做客户端程序。Java小应用程序和应用程序的一个不同之处是,小应用程序只能和它所驻留的服务器建立套接字连接。 3.2程序清单 例1客户端程序puter_client.java importjava..*;importjava.io.*; importjava.aportjava.aportjava.applet.*; publicclassputer_clientextend
7、sAppletimplementsRunnable,ActionListener { Buttonbutton; TextFieldtext1,text2; Socketsocket=null; DataInputStreamin=null;DataOutputStreamout=null; Threadthread; publicvoidinit() { setLayout(ne(socket.getInputStream(
此文档下载收益归作者所有