JAVA中使用Socket通讯的实现

2012-06-27 03:30何咏明
长江工程职业技术学院学报 2012年4期
关键词:网络连接客户机服务端

何咏明

(长江工程职业技术学院,武汉 430212)

所谓socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。

以J2SDK-1.6为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

java.net.Socket继承于java.lang.Object,有9个构造器,其方法并不多,下面介绍使用最频繁的3个方法,其它方法大家可以见JDK-1.6文档。

·Accept方法用于产生“阻塞”,直到接受到一个连接,并且返回一个客户端的Socket对象实例。“阻塞”是一个术语,它使程序运行暂时“停留”在这个地方,直到一个会话产生,然后程序继续;通常“阻塞”是由循环产生的。

·getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。

·getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

1 如何开发一个Server-Client模型的程序

Socket通讯原理图如图1。

服务器:创建ServerSocket于指定的端口监听客户端的连接请求,有连接为服务端创建一个可以通讯的socket。

客户端:使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,就能进行socket通讯。借助于上述原理开发的简易通讯程序如图2。

2 关键代码

2.1 启动服务

创建ServerSocket对应的服务的端口号,创建一个线程去监听客户端的连接情况,如果有客户端的连接则把一个JFrame服务端通讯的窗口包装成一个线程去与客户端进行socket通讯,直到客户端或者是服务端发出bye才结束通讯。

图1 Socket通讯原理图

图2 简单通讯程序

2.2 服务端通讯

(1)服务端通讯在构造函数中通过传递的socket对象来获取相关的输入和输出流,同时把窗体自身显示出来。

关键代码:

(2)发送消息

服务器可以随时向客户机发送消息,下面的代码是发送用的代码,同时也监听客户机的情况,当客户机向服务器发送bye时,延迟2秒关闭自身,此时由于客户端已经接收到bye能够进行自身窗口的关闭操作而先期关闭客户端的窗口。

关键代码:

(3)接收消息

接收消息采用线程来完成,因为消息的到达是随机的,我们不能让CPU来等待一个随机的消息的到达,此时改善性能的最好的办法就是使用线程,让CPU从繁重的等待中解脱出来而做重要的事情。下面是接收消息的代码,当接收到一个bye时关闭相关的通讯并退出应用程序。

2.3 客户机通讯

客户机采用对话框的形式创建窗口,通过构造函数来侦听指定IP地址上的端口号,同时添加窗口的关闭事件,并使自身显示出来。

构造函数关键代码:

客户机的其它通讯与服务器的代码是一致的,在此不再重复。

猜你喜欢
网络连接客户机服务端
个性化设置 Win10 的网络连接信息
运动想象的大尺度动态功能网络连接
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
中小型网络组建技术
摸清黑客套路防范木马侵入
瘦客户机:安全与便捷的选择
升腾瘦客户机借神码翱翔“云端”
基于Web数据提高访问速度的方法