【发布时间】:2013-02-14 19:27:12
【问题描述】:
我实现了一个小型 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();
}
}
【问题讨论】:
-
问题是每个连接都会覆盖前一个。您需要有多个连接字段和多个输入/输出流。确实,您需要生成一个线程来处理连接,并且 它 可以维护连接和流。
-
docs.oracle.com/javase/tutorial/networking/sockets/… - 请参阅本教程的最后一节,它有一个完整的工作示例,说明如何支持多个客户端。
标签: java multithreading sockets objectoutputstream objectinputstream