0

嗨,我正在尝试了解 Sockets 的工作方式如何实现多人游戏的垄断游戏。我了解如何创建连接,但现在看来我在客户端和服务器之间发送和接收数据时遇到了麻烦。这是我的代码:

客户端代码:

public class EchoClient
{
  public static void main(String[] args)
  {
    Socket echoSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;

    try
    {
      echoSocket = new Socket("127.0.0.1", 5000);;
      out = new PrintWriter(echoSocket.getOutputStream());
      in = new BufferedReader(
          new InputStreamReader(echoSocket.getInputStream()));

      BufferedReader stdIn = new BufferedReader(
          new InputStreamReader(System.in));

      String userInput;

      while ((userInput = stdIn.readLine()) != null)
      {
        out.println(userInput);

      }

      out.close();
      in.close();
      stdIn.close();
      echoSocket.close();
    }
    catch (UnknownHostException e)
    {
      System.err.println("Don't know about host: taranis");
    }
    catch (IOException e)
    {
      System.err.println("Couldent get I/O for "
          + " the connection to : taranis.");
    }

  }
}

服务器代码:

public class ServerSide
{

  ServerSocket connect;
  Socket connection;
  PrintWriter out;
  BufferedReader in;

  public void go()
  {

    try
    {
      connect = new ServerSocket(5000);
      connection = connect.accept();
      in = new BufferedReader(
          new InputStreamReader(connection.getInputStream()));

      String userInput;

      while ((userInput = in.readLine()) != null)
      {
        System.out.println("echo: " + in.readLine());
      }

    }
    catch (IOException e)
    {
      System.out.println(e);
    }
  }

  public static void main(String[] args)
  {
    new ServerSide().go();
  }
}

我试图在这里创建客户端和服务器之间的简单连接。在客户端,当用户输入数据时,我希望将其发送到服务器,然后在服务器控制台上打印它。似乎我的方式改正代码它没有工作我做错了什么?

4

3 回答 3

0

在客户端上,您out.flush;out.println.

在服务器上,

    while ((userInput = in.readLine()) != null) {
        System.out.println("echo: " + userInput); // not in.readLine
    }
于 2012-05-22T16:17:29.917 回答
0

首先,您需要声明一个控制台对象,然后在其上打印。
然后不要忘记:
在服务器端的控制台上每次打印后,您需要刷新流,以便打印所有数据。

于 2012-05-22T16:11:00.960 回答
0

你的代码对我来说看起来不错。通常使用套接字和键盘输入时,您会遇到 reader.readLine() 挂起的情况,因为它仍在尝试从另一端读取输入。通常,我会在客户端末尾放置一个空的 out.println() ,以便服务器终止读取 while 循环。我之前按照 Mike 的建议尝试过 flush() ,但这似乎对我不起作用。

于 2012-05-22T16:13:47.710 回答