进阶版socket
2019-10-23 本文已影响0人
请叫我刚爷
服务端接收不止一个客户端所以基础版socket已经不满足了。(基础版翻一下我的历史文档)以下暂时可以满足多客户端连接。
package com.netty.socketDemo2;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) throws UnsupportedEncodingException, IOException {
// 第一步、创建ServerSocket对象,绑定监听端口
int port = 6667;
ServerSocket serverSocket = new ServerSocket(port);
// 第二部、监听端口
Socket client = null;
while (true) {//此处是为了避免数据处理过程中异常,造成程序退出,毕竟服务端不可能出了问题手动处理
try {
//accept()是一個阻塞方法,当有链接连接时才会创建
client = serverSocket.accept();
//创建一个线程去处理当前信息,否则无法接收下一个连接
new Thread(new ServerHandler(client)).start();;
} catch (IOException e) {
System.out.println("服务端异常");
}
}
}
}
package com.netty.socketDemo2;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class ServerHandler implements Runnable{
public static final int MAX_DATA_LEN = 1024;
private final Socket socket;
public ServerHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
doStart();
}
public void doStart() {
InputStream inputStream = null;
try {
// 第三步、建立好连接后,通过输入流读取客户端发送的请求信息
inputStream = socket.getInputStream();
while (true) {
byte[] data = new byte[MAX_DATA_LEN];
int len;
while ((len = inputStream.read(data)) != -1) {
String message = new String(data, 0, len);
System.out.println("客户端传来消息: " + message);
// 第四部、通过输出流向客户端发送响应信息
socket.getOutputStream().write(data);
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//第五步关闭资源
try {
inputStream.close();
} catch (Exception e2) {
}
try {
socket.close();
} catch (Exception e2) {
}
}
}
}