【问题标题】:php (client socket) java (server socket) cant receive second dataphp(客户端套接字) java(服务器套接字)无法接收第二个数据
【发布时间】:2020-04-03 21:15:46
【问题描述】:

这是我连接 java 套接字的代码:-

$socket         = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, '127.0.0.1', 12345);

while(true) 
{
    // read a line from the socket
    $line = socket_read($socket, 1024, PHP_NORMAL_READ);

    var_dump($line);

    $someArray  = json_decode($line, true);
    $otp         = $someArray["otp"];

    if($someArray["msg"] == "otp_generation")
    {           
        $myObj      = new \stdClass();          
        $myObj->msg = "OTP RECEIVED NEED TO CONNECT";       
        $send       = json_encode($myObj);

        socket_send($socket, $send, strlen($send), 0);
    }
    exit;       

}

我的问题是 -

成功建立连接后,服务器向客户端发送一个 OTP 并在客户端成功接收。然后我将数据发送到服务器 OTP RECEIVED 确认,它也在服务器中收到。在收到 OTP 确认后,服务器向客户端发送欢迎消息。我无法收到欢迎信息。如果我删除“退出”代码浏览器仍在加载,最后崩溃。为什么我没有收到第二个数据。任何人解决我的问题。我需要修改什么。我是套接字的初学者。

我需要显示欢迎消息。我能做些什么?

【问题讨论】:

  • 当您删除 exit 时,您将进入一个无限循环,因为它不会检查是否有条件爆发。
  • 服务器发送欢迎信息后是否关闭连接?当服务器关闭连接时,$line 将是 FALSE,你应该检查一下。
  • @Barmar 服务器没有关闭连接。它将在 3 分钟后关闭。
  • @Barmar 如果我删除出口,它将无限,但我无法跟踪来自服务器的任何数据。如果我把存在第一个响应将显示。你能告诉我我能做什么。你有任何例子

标签: php


【解决方案1】:

您需要继续循环并阅读下一条消息,然后跳出循环。

while(true) 
{
    // read a line from the socket
    $line = socket_read($socket, 1024, PHP_NORMAL_READ);

    var_dump($line);

    $someArray  = json_decode($line, true);

    if($someArray["msg"] == "otp_generation")
    {           
        $otp         = $someArray["otp"];
        $myObj      = new \stdClass();          
        $myObj->msg = "OTP RECEIVED NEED TO CONNECT";       
        $send       = json_encode($myObj);

        socket_send($socket, $send, strlen($send), 0);
    } elseif ($someArray["msg"] == "welcome") {
        // do whatever you need to do with the rest of the message
        break; // then get out of the loop
    } else {
        echo "Unknown message received";
        var_dump($someArray);
        break;
    }
}

我不得不猜测欢迎消息的格式,但这应该可以让您大致了解。

【讨论】:

  • 感谢您的回复。浏览器仍在加载,不显示输出。你能建议任何其他选项来进行 tcp 同时连接吗?
  • 您确定服务器正在发送第二条消息吗?听起来第二次拨打socket_read() 正在等待消息。
  • 是的,我也开发了服务器。它发送第二条消息。请问你能找到解决办法吗?
  • 如果我退出 "OTP RECEIVED NEED TO CONNECT" 消息发送到服务器,否则不发送。
  • 我添加了一个else 子句来处理错误消息
【解决方案2】:

没有新行 cmd 数据不发送。这是我犯的错误。终于得到朋友的答复了。

我只是在下面添加一行;-

socket_send($socket, $send."\r\n", strlen($send."\r\n"), 0);

感谢@hemanth kumar 和@Barmar

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 2016-07-19
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多