本文共 2078 字,大约阅读时间需要 6 分钟。
我遵循客户端-服务器模型开发了一个简单的Java 2D多人游戏。 关于套接字编程的功能很简单:
客户端向服务器发送其角色数据(x位置,y位置,健康点等)
服务器将更新的字符数据注册在一个表中,该表存储所有不同客户端的字符数据
服务器将表发送回客户端,以便他们可以呈现其他字符
我遇到了一个怪异的问题,希望能帮助您理解,以便我可以继续进行该项目。 这是我现在正在运行的代码。
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Set;
import java.util.Vector;
import java.util.HashSet;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server
{
private static Vector IDs = new Vector<>();
public static void main(String[] args) throws Exception
{
ExecutorService pool = Executors.newFixedThreadPool(32);
try (ServerSocket listener = new ServerSocket(40000))
{
System.out.println("The server is up.");
while (true)
{
pool.execute(new Player(listener.accept()));
}
}
}
private static class Player implements Runnable
{
private Socket socket;
private Scanner input;
private PrintWriter output;
private int ID;
public Player(Socket socket)
{
this.socket = socket;
this.ID = IDs.size() + 1;
IDs.add(ID);
}
public void run()
{
try
{
input = new Scanner(socket.getInputStream());
output = new PrintWriter(socket.getOutputStream(), true);
while(input.hasNextLine())
{
String result = "";
for(int i = 0; i < IDs.size(); i++)
{
result += (IDs.get(i) + " ");
}
output.println(result);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
}
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
try (Socket socket = new Socket("127.0.0.1", 40000)) {
Scanner scanner = new Scanner(System.in);
Scanner in = new Scanner(socket.getInputStream());
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
while (scanner.hasNextLine()) {
out.println(scanner.nextLine());
System.out.println(in.nextLine());
}
in.close();
scanner.close();
}
}
}
我想发生的事情是:每次客户端向服务器发送任何消息时,服务器都会以ID列表进行响应(每个连接的客户端都会获得一个新ID)。
实际情况:
连接的第二个客户端能够看到已经有第一个客户端。 但是第一个客户端看不到第二个客户端连接。
谢谢您的帮助。
转载地址:https://blog.csdn.net/weixin_32473663/article/details/114483103 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!