在Java中,如何在同一网络上的服务器和客户端之间创建同步连接?

在Java中,如何在同一网络上的服务器和客户端之间创建同步连接?,java,multithreading,networking,Java,Multithreading,Networking,我正在尝试为我的计算机科学期末考试制作一个枫树故事类型的游戏。它基本上是一个在局域网上播放的2D RPG。我的问题是如何使两台计算机之间的连接同时进行 class MagicServer extends Thread { private ServerSocket serverSocket; public MagicServer(int port) throws IOException { serverSocket =

我正在尝试为我的计算机科学期末考试制作一个枫树故事类型的游戏。它基本上是一个在局域网上播放的2D RPG。我的问题是如何使两台计算机之间的连接同时进行

    class MagicServer extends Thread
    {
       private ServerSocket serverSocket;

       public MagicServer(int port) throws IOException
       {
          serverSocket = new ServerSocket(port);
          //serverSocket.setSoTimeout(10000);
       }

       public void run()
       {
          Scanner kb = new Scanner(System.in);
          while(true)
          {
             try
             {
                System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "...");
                Socket server = serverSocket.accept();

                System.out.println("Just connected to " + server.getRemoteSocketAddress());

                DataInputStream in = new DataInputStream(server.getInputStream());
                DataOutputStream out = new DataOutputStream(server.getOutputStream());

                System.out.println(in.readUTF());

                for(int i=0; i<5; i++)
                {
                    System.out.println(in.readUTF());
                    out.writeUTF(kb.nextLine());
                }

                server.close();

             }

             catch(SocketTimeoutException s)
             {
                System.out.println("Socket timed out!");
                break;
             }

             catch(IOException e)
             {
                e.printStackTrace();
                break;
             }
          }
       }
       public static void main(String [] args)
       {
          int port = 2001;
          try
          {
             Thread t = new MagicServer(port);
             t.start();
          }catch(IOException e)
          {
             e.printStackTrace();
          }
       }
    }

我正在试验这种方法,我只能在两台计算机之间按顺序发送/接收消息,即服务器发送到客户端,然后客户端发送到服务器,我不能乱序。我该怎么做?

您可以使用多个线程在一个端口的一个线程中以一种方式建立连接,在另一个端口的另一个端口上以另一种方式建立连接。但这可能会带来一些同步问题,因此,我建议重新考虑您的设计,以便每次只需在一个方向上进行通信,您可以根据需要随时来回切换。

您必须使用多个线程或通过互锁队列来解除读/写耦合,以管理您的工作

在循环中,通过在代码中先读后写来强制序列化

您没有理由不能生成一个读取器线程,该线程馈送到队列中,以按工作线程执行工作,并在另一个线程上执行写入操作。您只需要在工作队列上进行同步

您还可以轮询套接字以查看是否有任何数据可供读取,如果没有,则发送任何等待写入的数据

有更多奇特的方法可以做到这一点,还有大量的例子,四处搜索,看看你喜欢什么


如果你要求计算机同时向彼此发送数据,我认为这是不可能的。在网络世界中,计算机不会同时进行通信。他们发送一个信号,然后等待响应。这不仅是可能的,而且非常常见。TCP是双向的。第二个连接完全没有必要。