关于php socket 问题!

菠萝不在家 2013-07-12 11:22:03
最近做的一个项目,需要用到php socket通信方面,现在我测试了 ,在TCP下可以成功从客户端发往服务端,服务端也可以返回到客户端信息。
但是在UDP下,程序就会出现问题,可以在客户端接收到信息,但是用socket_write()返回的话,会显示找不到返回的地址。。。然后 客户端也接受不到服务端返回的信息!
在此 请求 懂这方面的帮忙解决下。

PHP Warning: socket_write(): unable to write to socket [0]: 由于套接字没有连接
并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求
没有被接受。
...全文
296 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
菠萝不在家 2013-07-12
  • 打赏
  • 举报
回复
非常感谢snmr_com 从你发给我的链接上 的代码 ,修改了下,成功了!
菠萝不在家 2013-07-12
  • 打赏
  • 举报
回复
我也不想用UDP了 ,TCP的测试成功了,但是项目要求必须要用UDP的 !
ImN1 2013-07-12
  • 打赏
  • 举报
回复
这里有个足够简单的UDP例子了 http://www.zrwm.com/?p=1281
jdgdf566 2013-07-12
  • 打赏
  • 举报
回复
curl可能支持udp
jdgdf566 2013-07-12
  • 打赏
  • 举报
回复
别使用udp了。tcp是标准的被推荐的方式。udp在很多软件中都不被支持。
菠萝不在家 2013-07-12
  • 打赏
  • 举报
回复
嗯 没必要绑定。。 我这不是没有办法了么, 然后各种测试么。 客户端BIND以前是没绑定的,在这里没有效果的。 我删除了BIND ,也一样出现这样的效果!
ImN1 2013-07-12
  • 打赏
  • 举报
回复
客户端应该是连接哪里就从哪里recv的,没理由要分开端口 客户端也没必要bind吧?
ImN1 2013-07-12
  • 打赏
  • 举报
回复
呃,UDP。。。 我再看看
菠萝不在家 2013-07-12
  • 打赏
  • 举报
回复
connect 是在客户端加的啊。。。 而且我用的是socket_recvfrom 与socket_sendto 后面加地址的。 所以 这里可以不用加connect的,在客户端的connect 是我测试socket_write与socket_read的时候用的
菠萝不在家 2013-07-12
  • 打赏
  • 举报
回复
因为是UDP的 不是TCP的啊。。。
ImN1 2013-07-12
  • 打赏
  • 举报
回复
connect也没有……很晕
ImN1 2013-07-12
  • 打赏
  • 举报
回复
服务器端为何没有listen和accept?
菠萝不在家 2013-07-12
  • 打赏
  • 举报
回复
// $port=0; 这里的注释也要去掉。。 一直做各种测试呢 。 没弄好 帮忙看下吧。 就是服务端可以接受到,客户端接收不到服务端回传的信息,或者是回传不过来。
菠萝不在家 2013-07-12
  • 打赏
  • 举报
回复
这里是服务端 <?php set_time_limit( 0 ); ob_implicit_flush(); echo "创建SOCKT...\n"; $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP); if ( $socket === false ) { echo "socket_create() failed:reason:" . socket_strerror( socket_last_error($socket) ) . "\n"; } echo "绑定SOCKT...\n"; $ok = socket_bind( $socket, '192.168.1.59', 8686); if ( $ok === false ) { echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) ); } else { echo "绑定SOCKT成功...\n"; } $count = 0; socket_set_block ($socket); do { $msg ="服务端发往客户端!!!\n"; socket_sendto($socket,$msg,strlen($msg),0,'192.168.1.59',1207); echo "测试成功了\n"; $form=""; // $port=0; socket_recvfrom($socket,$buf,1024,0,$form,$port); echo "测试成功了啊\n"; $talkback = "收到的信息:$buf\n"; echo $buf1; echo $talkback; } while (true); socket_close($socket); ?> 这里是客户端 <?php $server_ip="192.168.1.59"; $port = 8686; echo "创建SOCKT...\n"; $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or die ("sockt create failed"); socket_bind( $socket, '192.168.1.59', 1207); if(!socket_connect($socket, '192.168.1.59', $port)){ print("Couldn't connect: " .socket_strerror(socket_last_error()) . "\n"); } socket_sendto($socket, $str, $arrayLen, 0, '192.168.1.59',8686); echo "发送到服务器信息成功!\n"; echo "发送的内容为:<font color='red'>$str</font> <br>"; $form =""; $port1=0; socket_recvfrom($socket,$buf,1024,0,$form,$port1); echo $form; echo $port1; echo "回传信息成功!".$buf; echo "<br/>"; echo "关闭SOCKET...\n"; socket_close($socket); echo "关闭OK\n"; ?> 帮忙看下吧
ImN1 2013-07-12
  • 打赏
  • 举报
回复
是理解不到,你上面的出错信息说的很明白了,就是没有连接或者地址不正确 给个代码看看吧,靠猜没有用
菠萝不在家 2013-07-12
  • 打赏
  • 举报
回复
.......没有 做过这方面的么?

20,398

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧