我实现了一个相当简单的服务器,可以处理多个客户端,我首先接受这样的客户端
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
}
有没有简单的方法
监听传入消息
确定消息来自哪个客户端
解析消息等。
都在一个循环中,而不为每个客户端创建单独的线程?
它可以工作。当服务器处理当前请求时,并发请求将等待。但您需要确保客户端已准备好处理ConnectException并重复请求。传入连接队列有限制(默认为50,可能会更改)。如果队列已满,ServerSocket将拒绝连接。请参阅ServerSocket API
顺便说一句,如果(clientSocket!=null)没有意义,服务器ocket.accept()永远不会返回null
尝试使用这样的东西:
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);
}
}
}
问题内容: 我是一个优秀的程序员,但是我的网络经验为零。 基本上,我想进入客户端- 服务器网络。例如,我想尝试运行一个服务器进程,该进程允许客户端通过Internet连接并将ping发送到所有其他连接的客户端。然后,也许我将尝试开发一个简单的聊天客户端,或一些简单的多人游戏,然后从那里开始。 我非常了解可能有用的语言:Java,C ++,C。 我该如何开始?我想提前学习最佳实践,因此您可以推荐的良
问题内容: 有什么方法可以使用soap-rpc Web服务,以便通过共享接口生成客户端?宁静的Web服务以这种方式进行操作,但是基于soap的情况又如何呢?您是否总是需要使用Axis或CXF之类的工具来生成存根和代理,还是有可以动态设置的东西? 谢谢。 编辑#1: 为了澄清,我正在寻找做这样的事情: 通用接口: 该公共接口已经可以用于创建服务器端组件。我的问题是: 客户端可以使用这种类型的通用接口
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se
问题内容: 我正在使用RMI编写密码系统的原型。 我有一个问题,因为当我启动两个客户端时,它们从OneTimePad类的服务器中的一个对象获得了响应。 因此客户端A获取为客户端b保留的密钥,由于特定的算法,这种情况不会发生。 服务器仅向客户端发送E和N变量(例如在RSA中),因此我无法序列化OneTimePad对象并通过网络发送它(因为它将具有所有密钥)。 如何为每个客户端创建OneTimePad
问题内容: 我写了一个服务器-客户端通信程序,它运行良好。 客户端模块 服务器模块 上面是单个客户端与服务器通信的代码, 现在我希望多个客户端与该服务器进行交互 。我用谷歌搜索它,发现可以通过使用一个线程让每个客户端与服务器对话来完成它,但是由于我是一个初学者,所以我不知道该如何实现。所以有人请告诉我该怎么做或给我一些想法。 问题答案: MainServer类 助手类
我正在开发一个具有多个客户端的标准java RMI服务器。这些客户机有一个菜单,在那里他们可以调用服务器为他们做各种事情。 一种方法涉及一个队列,他们可以在其中将作业发送到队列并等待它得到处理。RMI服务器自动为所有客户端处理线程,但当涉及到此方法和队列时,我如何阻止此请求,例如: 首先调用客户端1,然后再调用客户端2(此处客户端1应首先从服务器接收消息,客户端2应等待服务器处理客户端1请求所需的