我正在使用这段代码使用套接字公开一个简单的函数:
while (true) {
try {
ServerSocket serverSocket = new ServerSocket(7070);
Socket clientSocket = serverSocket.accept();
String input = (new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))).readLine();
synchronized (this.map) {
ObjectOutputStream o = new ObjectOutputStream(clientSocket.getOutputStream());
o.writeChars(map.get(input));
o.close();
}
clientSocket.close();
serverSocket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
我究竟做错了什么?日志记录显示它卡在输入接收行中,它有时会抛出一个异常,说明套接字正在使用
答案 0 :(得分:3)
对于初学者来说,你是在[/ i]循环中创建ServerSocket [i],这显然不是你想要的。你只想创建一次,然后有一个不断从套接字中读取的循环。
答案 1 :(得分:2)
readLine()因为忘记刷新发件人的输出流(另一个进程)而卡住了。
使用套接字时,计算机将缓冲一些数据(通常为4KB),因为通过网络发送少量数据非常昂贵。因此,如果您的数据较少,则需要告诉它“立即发送”。