我实现了一个小型Java聊天室程序,客户端可以与服务器进行通信。虽然多个客户端无法工作 - 我相信这是因为客户端在连接时保留套接字?有没有一种简单的方法来添加多个客户端功能?谢谢你的帮助。
public void startRunning(){
try{
server = new ServerSocket(6789, 100); // port no, max users
while(true){
try{
waitForConnection();
setupStreams();
connectionRecieving();
}catch(EOFException eofException){
showMessage("Server ended connection \n");
}finally{
closeConnection();
}
}
}catch(IOException ioException){
ioException.printStackTrace();
}
}
// Wait for connection
private void waitForConnection() throws IOException{
showMessage("Attempting connection... \n");
connection = server.accept();
showMessage("Connected to: " + connection.getInetAddress().getHostName() + "\n");
}
// Get stream to send and receive data
private void setupStreams() throws IOException{
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
}
// Close streams and sockets
private void closeConnection(){
showMessage("----- \nClosing connections... \n");
try{
output.close();
input.close();
connection.close();
}catch(IOException ioException){
ioException.printStackTrace();
}
}
答案 0 :(得分:0)
要同时读写多个客户端,您需要单独的线程(阻止IO),或者如果您想使用单个线程,NIO(非阻塞IO)。
您可以查看this post有关实施差异的信息,但NIO通常是更有效的方法。
使用阻塞I / O通常遵循上面使用的代码,除非您需要一个单独的线程来处理每个接受的套接字。使用NIO,使用起来有点复杂;看看this tutorial。