Java Socket对象需要我们大家详细的学习,相关的问题一直在困扰着我们。下面我们就看看如何才能更好的使用Java Socket对象。那么首先我们就从原理来看一看。
这个设计原理非常类似于平时打电话进行通讯:#t#
(1)首先通讯双方各有一台电话机,在上述模型中就是Socket;
(2)通讯一方拔打电话,试图建立连接,在上述模型中就是客户端建立Java Socket对象;另一方随时监听有没有呼叫,当有呼叫到来时,摘机,在上述模型中就是在服务器端建立一个Java Socket对象,然后用其accept()方法监听客户端的连接请求,当有连接请求时accept方法返回客户端的Socket,于是双方就建立起连接;
(3)双方通话,过程中双方都可以说和听,在上述模型中,每个Socket可以利用输入输出流进行读和写两种操作;在电话中一方听到的是对方说出的,反之亦然;上述模型中,一方读出的也是对方写入的,而写入的则是对方要读出的
(4)挂断。
建立Socket通信模型
首先,在服务器端建立一个ServerSocket对象,用于监听客户端的连接请求:
- ServerSocket server;try{server=new ServerSocket(4321);}
- catch(Exception e){System.out.println("Error:"+e);}
在服务器端建立ServerSocket对象时必须进行异常处理,以便程序出错时及时作出响应。生成ServerSocket对象时必须选择一个端口注册,以和其它服务器程序分开,使互不干扰。应使用1024以上的端口进行通信,以免和常规通信发生端口冲突。
其次,在服务器端调用ServerSocket的accept()方法进行监听,等待其它程序的连接请求。在连接请求收到之前一直阻塞调用线程,当有一个连接请求时,返回请求连接的Java Socket对象:
- Socket socket;
- try{socket=server.accept();}
- catch(Exception e){System.out.println("Error:"+e);}
当接到一个连接请求时,accept方法返回客户端的socket对象,于是连接成功。正常情况下,通过交换,由另外的线程去处理该连接,而server释放出来继续监听下一个连接请求。
最后,在客户端建立一个Java Socket对象,请求建立连接:
- Socket socket;
- try{socket=new Socket("Server Nane",4321);}
- catch(Exception e){System.out.println("Error:"+e);}
在客户端建立Java Socket对象时也必须时行异常处理,主机名和端口号与连接的服务器名和提供该服务的服务程序的监听端口必须一致。