gpt4 book ai didi

php - php中的udp套接字编程

转载 作者:行者123 更新时间:2023-12-03 12:05:29 28 4
gpt4 key购买 nike

我正在尝试在Windows cmd上运行udp套接字。这是我的服务器脚本。

<?php

error_reporting(~E_WARNING);

if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

// Bind the source address
if( !socket_bind($sock, '0.0.0.0' , 80) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not bind socket : [$errorcode] $errormsg \n");
}

echo "Socket bind OK \n";

while(1)
{
echo "Waiting for data ... \n";

//Receive some data
$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
echo "$remote_ip : $remote_port -- " . $buf;

//Send back the data to the client
socket_sendto($sock, "OK " . $buf , 100 , 0 , $remote_ip , $remote_port);
}

socket_close($sock);

运行上述脚本时,我得到一个响应,内容如下:
Socket created 
Socket bind OK
Waiting for data ...

下面是我的客户端脚本。
<?php

error_reporting(~E_WARNING);
$server = '127.0.0.1';
$port = 9999;

if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Couldn't create socket: [$errorcode] $errormsg \n");
}

echo "Socket created \n";

while(1)
{
//Take some input to send
echo 'Enter a message to send : ';
$input = fgets(STDIN);

//Send the message to the server
if( ! socket_sendto($sock, $input , strlen($input) , 0 , $server , $port))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not send data: [$errorcode] $errormsg \n");
}

//Now receive reply from server and print it
if(socket_recv ( $sock , $reply , 2045 , MSG_WAITALL ) === FALSE)
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);

die("Could not receive data: [$errorcode] $errormsg \n");
}

echo "Reply : $reply";
}

在运行上述套接字时,我得到以下输出。
Socket created
Enter a message to send:[random input]
Could not receive data:[0] The operation completed successfully

是什么原因造成的呢?..输入一些输入后,将显示上面的最后一行,而不是“Reply:[random input]”

提前致谢

最佳答案

在socket_recv函数中使用此标志“MSG_PEEK”代替“MSG_WAITALL”。
谢谢你。

关于php - php中的udp套接字编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19007897/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com