reeze 2008-10-30 10:37
浏览 350
已采纳

有关读取UDP 数据包 不定长度的问题。

大家好,我用php开启了一个UDPserver 客户端向服务器发送数据。收到后返回一个小信息。
给大家看看基本的代码
[code="php"]
$pkt = stream_socket_recvfrom($socket, 100, 0, $peer);

$reciv_data = fread($socket, 100);
$message = preg_replace("/[[:space:]]/", '', $reciv_data); // cleanup data

$response = "hello, $message";
stream_socket_sendto($socket, $response, 0, $peer);

echo " In > [$message] \n";
echo " Out > [$response] \n";
[/code]

fread 我设置的长度是100,我出现这样一个问题,客户端必须发满了100个字符才能读取完并返回。
如果一次没有够的话,得再发一个包才行。

客户端代码
[code="php"]
$fp = stream_socket_client("udp://10.193.250.241:7777", $errno, $errstr);
if (!$fp) {
die("ERROR: $errno - $errstr
");
}
$request = "my name";
stream_socket_sendto($fp, $request . "\n", 0);
stream_socket_sendto($fp, $request . "\n", 0);
[/code]
这样我内容才能读完。似乎也不够100字符。
总之,我就是想问一下怎么样读取一个不知道长度的udp包的内容呢。我想其他语言里的方法也差不多吧。
谢谢了!

  • 写回答

1条回答 默认 最新

  • liuqaing_0701 2008-10-31 15:38
    关注

    这个偶也不是很清楚,我觉得你可以指定缓冲区大小的吧:)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作