【问题标题】:Cannot read response from Java socket server using PHP client无法使用 PHP 客户端从 Java 套接字服务器读取响应
【发布时间】:2012-05-26 22:11:45
【问题描述】:

我有一个用 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”消息,服务器也收到“我是客户端”消息,但 PHP 客户端没有收到回复。我在这里做错了什么?

【问题讨论】:

    标签: java php sockets client-server


    【解决方案1】:

    in.readLine() 在看到行终止符之前不会返回。

    除非 PHP 中的 socket_write 隐式添加行终止符,否则您需要自己执行此操作,以便 Java 端看到您已经编写了完整的文本行。

    【讨论】:

    • 好的。所以我需要在回复后添加一个换行符!
    • 请注意服务器确实从 php 获取消息的操作声明(暗示 readline() 已返回)。虽然,我仍然认为你是对的。
    • @chris:啊,我错过了。我看不到 OP 如何从客户端获取消息,除非 socket_write 确实隐式添加了换行符......或者 PHP 脚本已经放弃并关闭了套接字。
    • 同意。我认为 readline 没有真正返回,因为 socket_write 没有添加换行符或 null 或类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多