java中具有多个客户端的网络服务器
Posted
技术标签:
【中文标题】java中具有多个客户端的网络服务器【英文标题】:Networking server with multiple clients in java 【发布时间】:2013-06-01 01:55:00 【问题描述】:我正在实现一个可以处理多个客户端的相当简单的服务器,我首先接受这样的客户端
private static Queue<Player> playerList = new ArrayDeque<Player>();
try
serverSocket = new ServerSocket(port);
// Listen for new clients
Socket clientSocket = null;
int numPlayers = 0;
while (numPlayers < 2)
clientSocket = serverSocket.accept();
if(clientSocket != null)
// Create a new player
Player p = new Player(clientSocket);
// Add them to the list of players
playerList.add(p);
catch (IOException e)
System.out.println("Could not listen on port: " + port);
System.exit(-1);
根据我的阅读,似乎通常会为每个客户端创建一个新线程,但如果有更简单的方法,我真的不认为有必要解决这个问题。我只需要能够在服务器和客户端之间发送和接收消息。
while (true)
// Check for anything on the buffer
// Parse message
有没有简单的方法
监听传入的消息
确定消息来自哪个客户端
解析消息等
全部在一个循环中而不为每个客户端创建单独的线程?
【问题讨论】:
【参考方案1】:尝试使用类似的东西:
while (true)
for(Player p : playerList)
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getSocket().getInputStream()));
String data;
while ((data = reader.readLine() != null)
p.packetRecieved(data);
【讨论】:
【参考方案2】:它可以工作。服务器正在处理当前请求时,并发请求将处于等待状态。但是您需要确保客户端准备好处理 ConnectException 并重复请求。传入连接队列有限制(默认为 50,可以更改)。如果队列已满,ServerSocket 将拒绝连接。请参阅 ServerSocket API
顺便说一句 if(clientSocket != null) 没有意义,serverSocket.accept() 永远不会返回 null
【讨论】:
很高兴知道!谢谢你的提示。如果没有什么可以接受的,accept 会返回任何东西吗? 不,它会等到它有东西。以上是关于java中具有多个客户端的网络服务器的主要内容,如果未能解决你的问题,请参考以下文章