0

こんにちは、ソケットの仕組みが独占ゲームにマルチプレイヤー側を実装する方法を理解しようとしています.接続を作成する方法は理解しましたが、クライアントとサーバーの間でデータを送受信するのに問題があるようです.ここに私のコードがあります:

クライアントコード:

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 ループを終了するようにします。マイクが提案したように、以前に flush() を試しましたが、うまくいかないようです。

于 2012-05-22T16:13:47.710 に答える