【问题标题】:UDP write to socket and read from socket at the same time(again with modification)UDP同时写入套接字和从套接字读取(再次修改)
【发布时间】:2009-03-30 10:53:21
【问题描述】:

服务器:

<?php
error_reporting(E_ALL | E_STRICT);

$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

socket_bind($socket, '192.168.1.7', 11104);

$from = "";
$port = 0;
socket_recvfrom($socket, $buf, 12, 0, $from, $port);
//$buf=socket_read($socket, 2048);

echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;
$msg="Sikerult";

//socket_write($socket, $msg, strlen($msg));
socket_sendto($socket, $msg, strlen($msg), 0, '192.168.1.6', 11105);
//socket_close($socket);
?>

客户:

<?php
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$result = socket_connect($sock, '192.168.1.6', 11105);
$msg = "Sikerult";
$len = strlen($msg);
//socket_write($sock, $msg, strlen($msg));
socket_sendto($sock, $msg, $len, 0, '192.168.1.7', 11104);
//$buf=socket_read($sock, 2048);
socket_recvfrom($sock, $buf, 12, 0, $from, $port);
echo $buf;
socket_close($sock);
?>

服务端接收到客户端的数据,但客户端没有从服务端得到任何东西,并没有停止运行。

【问题讨论】:

    标签: php sockets udp


    【解决方案1】:

    如果是 UDP 套接字,那么为什么首先需要连接。这还不够吗?

    <?php
        $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    
        $msg = "Sikerult";
        $len = strlen($msg);
    
        socket_sendto($sock, $msg, $len, 0, '192.168.1.7', 11104);
    
        socket_recvfrom($sock, $buf, 12, 0, '192.168.1.7', 11104);
        echo $buf;
    
        socket_close($sock);
    ?>
    

    【讨论】:

      【解决方案2】:

      我假设192.168.1.7:11104 是您的服务器。

      在服务器中,您需要将数据包发送回您收到它的位置:

      //...
      $msg="Sikerult";
      //...
      socket_sendto($socket, $msg, strlen($msg), 0, $from, $port);
      

      在您连接到自身的客户端中。您应该将其连接到服务器:

      $srvIP = '192.168.1.7';
      $srvPort = 11104;
      $result = socket_connect($sock, $srvIP, $srvPort);
      $msg = "Sikerult";
      $len = strlen($msg);
      socket_send($sock, $msg, $len, 0);
      socket_recv($sock, $buf, 12, 0);
      

      【讨论】:

      • 到socket_recvfrom你不能插入$srvIP和$srvPort,你从你那里得到数据
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多