我是一个团队,正在构建一个4人多人游戏,我正在开发服务器的内脏使用套接字。目前,我已经将服务器设置为接受多个客户端连接,并将它们保存到需要写入特定客户端时要访问的一系列套接字中。
我知道如何处理来自单个客户端的单个响应:
String response; while((response = in.readLine()) != null) {//do something}
但是,如何管理将同时发送到服务器的两个响应?
发布于 2015-12-03 02:23:19
我想你需要这样的东西:
someMethod() {
// Your array of sockets
Socket[] clientSockets;
// Create a new Thread to handle each socket and start them
for (int i = 0 ; i < clientSockets.length ; ++i) {
Thread t = new ListenToClientThread(clientSockets[i]);
t.start();
}
}
// When you call start() on a Thread it calls run()
class ListenToClientThread extends Thread {
private Socket socket;
ListenToClientThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
PrintWriter out =
new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String response;
while((response = in.readLine()) != null) {//do something}
}
}这里的诀窍是以一种允许所有不同线程访问共享对象的方式处理所有响应,为此,您必须阅读所有关于同步性的内容,小心...there是龙!
发布于 2015-12-03 01:57:27
使用线程。在文档中也有一个例子。也可以看到右边的相关问题-->
https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html
支持多客户端 为了保持KnockKnockServer示例的简单性,我们设计它来侦听和处理单个连接请求。但是,多个客户端请求可以进入同一个端口,从而进入同一个ServerSocket。客户端连接请求在端口排队,因此服务器必须按顺序接受连接。但是,服务器可以通过使用线程同时为它们提供服务--每个客户端连接一个线程。 这样一个服务器的基本逻辑流程是: 同时(true) {接受连接;创建一个线程来处理客户端;} 线程根据需要从客户端连接读取并写入。
发布于 2015-12-03 01:57:06
而不是在单个输入上,循环遍历所有输入并重新对它们进行重新排列。
只需实现socketObject.readline()或类似的。
for (Thread thread : threads)
{
thread.read()
}https://stackoverflow.com/questions/34056471
复制相似问题