Socket短连接的实现
Socket通讯顺序时不能颠倒,每次看别人的案例都倒在顺序上了。
服务端必须先接收消息再回复消息。
客户端必须先发送消息再接收消息。
在短连接中,流的关闭似乎是用socket.shutdownInput()和socket.shutdownOutput()来控制的,不能自己手动关闭流。
socket.getInputStream()对应socket.shutdownInput()
socket.getOutputStream()对应socket.shutdownOutput()
意义应该是告诉对方我已经结束输入流或输出流,对方不必等待我的输入流或输出流了。
如果是在服务端自己手动关闭流的话会导致Stream Closed异常。
Socket短连接在完成一次交互之后,Socket双方都会关闭连接。
在循环里客户端关闭连接后会尝试重新连接,如果需要跳出循环,客户端发送消息后,服务端回复OK即可。
Socket 服务端代码
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketShortConnectServer {
private static final int PORT = 8080;
public static void main(String[] args) {
MySocketShortConnectServer server = new MySocketShortConnectServer();
server.init();
}
public void init() {
ServerSocket serverSocket = null;
try {
//开启服务,监听端口号
serverSocket = new ServerSocket(PORT);
System.out.println("Socket Server Running...");
while (!serverSocket.isClosed()) {
//等待客户端连接
Socket client = serverSocket.accept();
System.out.printf("Socket Client Connecting %s\n", client.getRemoteSocketAddress());
//开启一个线程去处理连接
new socketHandlerThread(client);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static class socketHandlerThread implements