PHP客户端socket连接EXE服务端的相关问题
程序员文章站
2022-05-06 15:23:08
...
PHP运行环境:Windows Server 2012 R2 VL (Aliyun - QingDao) + PHP5.4.44 + MYSQL 5.6 + IIS8.5 + URL Rewrite 2.0 + FastCGI
服务端EXE运行环境:Windows Server 2012 R2 VL (Aliyun - QingDao) + E语言 5.3
这是我的代码,正常使用,之前没加trycatch语句,就会导致,如果一个访问者打开这个页面,另一个访问者同时也打开了这个页面,那第二个用户就会报500服务器错误,经过一些大神帖子发现是因为链接服务器失败导致的,可是我的服务端EXE不限制连接数,而且第一个能连接第二个怎么就不能了呢?难道一个PHP-CGI.EXE进程在同时只能发起一个Socket连接吗?
补充:第一个用户打开网页已发起Socket 但未处理完毕 未关闭连接,第二个用户就访问该页并创建socket,则第二个用户连接失败报错。
所有的错误都是提示在socket_connect语句的所在行。
恩不用了,已经解决了。谢谢。
恩不用了,已经解决了。谢谢。 分享下经验,大家学习下
服务端EXE运行环境:Windows Server 2012 R2 VL (Aliyun - QingDao) + E语言 5.3
function send($in){ try{ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 5, "usec" => 0)); socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 180, "usec" => 0)); $result = socket_connect($socket, '127.0.0.1', 9999); $out = ""; socket_write($socket, $in, strlen($in)); $out = socket_read($socket, 10240); socket_close($socket); return $out; }catch(Exception $e){ exit (""); }}
这是我的代码,正常使用,之前没加trycatch语句,就会导致,如果一个访问者打开这个页面,另一个访问者同时也打开了这个页面,那第二个用户就会报500服务器错误,经过一些大神帖子发现是因为链接服务器失败导致的,可是我的服务端EXE不限制连接数,而且第一个能连接第二个怎么就不能了呢?难道一个PHP-CGI.EXE进程在同时只能发起一个Socket连接吗?
补充:第一个用户打开网页已发起Socket 但未处理完毕 未关闭连接,第二个用户就访问该页并创建socket,则第二个用户连接失败报错。
所有的错误都是提示在socket_connect语句的所在行。
回复讨论(解决方案)
你作为服务端的程序是如何启动的?
既然你已经有了异常处理,那就不应该隐藏掉异常信息
出错时也应给出错误信息
这样判断错误原因才能有依据,你说对吧?
你echo下你的异常信息,或者使用socket_strerror(socket_last_error($socket))输出下socket产生的错误
服务器端的程序是exe 啊 当然就直接双击啊,我没有做成系统服务。。。PHP返回的异常信息就是unexpected error on socket_connect at line 5。连接失败,都unexpected了。。。socket_strerror(socket_last_error($socket))应该放在哪?
你作为服务端的程序是如何启动的?
既然你已经有了异常处理,那就不应该隐藏掉异常信息
出错时也应给出错误信息
这样判断错误原因才能有依据,你说对吧?
function send($in){ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 5, "usec" => 0)); socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 180, "usec" => 0)); $result = socket_connect($socket, '127.0.0.1', 9999); $out = ""; socket_write($socket, $in, strlen($in)); $out = socket_read($socket, 10240); socket_close($socket); return $out;}
你echo下你的异常信息,或者使用socket_strerror(socket_last_error($socket))输出下socket产生的错误
PHP返回的异常信息就是unexpected error on socket_connect at line 5
你echo下你的异常信息,或者使用socket_strerror(socket_last_error($socket))输出下socket产生的错误
if ($result == false) echo socket_strerror(socket_last_error($socket));
if ($result == false) echo socket_strerror(socket_last_error($socket));
恩不用了,已经解决了。谢谢。
if ($result == false) echo socket_strerror(socket_last_error($socket));
恩不用了,已经解决了。谢谢。 分享下经验,大家学习下
下一篇: 对象的串行化
推荐阅读
-
Socket 客户端不显示的关闭连接服务端read一直阻塞 ServerSocket
-
[PHP] socket客户端时的超时问题
-
【未解决问题】关于Socket编程:客户端、服务端对象流交互数据丢失的问题
-
socket通信 php作为客户端,C++作为服务端通信问题。
-
客户端websocket 无法连接上PHP socket有关问题
-
客户端websocket 无法连接上PHP socket有关问题
-
socket实现客户端和服务端通讯功能的php代码
-
客户端websocket 无法连接上PHP socket问题
-
php链接局域网mssql的有关问题[原因: 未与信任 SQL Server 连接相关联]
-
PHP的socket连接到服务端模版,socket服务端