Socket与ServerSocket的通讯

Socket与ServerSocket的通信
<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
一、连接
首先,在服务器中创建ServerSocket对象ss,对象ss调用accept方法的时候,可以得到一个Socket对象.
ServerSocket ss = new ServerSocket(613);// 不要使用80等其他程序常用端口,这里任选一个端口613
Socket st = ss.accept();
这是一个阻塞方法,如果accept不到一个客户端,他就一直会在这里等待客户端的连接,直到有一个客户端连上来才执行结束。
如果需要连接多个客户端,可以写while循环来执行ss.accept();

在客户端可以这样对其进行连接.
Socket st = new Socket("127.0.0.1", 613);// 服务器在本地,这里填写本地IP的字符串,后面加上端口.

到了这里,服务器和客户端就已经连接好了.

二、通信

通信即数据传输。
通过Socket对象,可以得到输入输出流。在这里需要注意的是,在服务端程序中用st.getInputStream()是得到了一个服务端的输入流,也就是这个流是用来读取客户端发过来的消息的,将客户端的消息读到服务器.同理,st.getOutputStream()就是将服务器的消息写到客户端去.

在客户端这边,同样用这个st.getInputStream();这是后得到的InputStream是从服务器读取数据到客户端的.

我们得到了这个流之后,可以将其包装成我们需要的流.对其进行write,read操作.即可实现客户端与服务端的通信.

三、一般的写法
当客户端连接到了服务器,服务器需要单独启动一个线程对客户端的消息进行处理,这个线程用来接受客户端的消息并将其进行处理(可能需要转发给其他客户端)

而客户端这边也需要单独开启一个线程来接受消息。

四、常用方法:
获得客户端IP地址
st.getRemoteSocketAddress();
获得客户端名字:
st.getInetAddress().getHostName();