0

私はJavaで書かれたサーバーを持っています。これは、クライアントが接続したときに「HELLO」をエコーし​​、クライアントが送信した応答をエコーバックする単純なものです。コードは以下のとおりです。

ServerSocket ss=new ServerSocket(2001);
while(true) {
  Socket s=ss.accept();
  BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
  PrintWriter out=new PrintWriter(s.getOutputStream(),true);
  out.println("HELLO");
  String msg=in.readLine();
  out.println(msg);
}

サーバーに接続するPHPスクリプトがあります。

<?php
  $socket=socket_create(AF_INET,SOCK_STREAM,getprotobyname('tcp'));
  socket_connect($socket,'127.0.0.1',2001);
  $msg=socket_read($socket,10);
  echo socket_write($socket,'I am the client.');
  $msg=socket_read($socket,20);
  echo $msg;
?>

サーバーから「HELLO」メッセージが表示され、サーバーにも「I am the client」メッセージが表示されますが、PHPクライアントからの応答が返されません。私はここで何が間違っているのですか?

4

1 に答える 1

4

in.readLine()行末記号が表示されるまで戻りません。

PHP で暗黙的に行末記号を追加しない限りsocket_write、Java 側が完全なテキスト行を記述したことを認識できるように、自分で行末記号を追加する必要があります。

于 2012-05-19T18:39:02.260 に答える