欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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
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))应该放在哪?

你作为服务端的程序是如何启动的?

既然你已经有了异常处理,那就不应该隐藏掉异常信息
出错时也应给出错误信息
这样判断错误原因才能有依据,你说对吧?

服务器端的程序是exe直接双击启动的 没有写系统服务项。另外我之前没做异常处理,这是后来加的,无视就好。
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产生的错误

PHP返回的异常信息就是unexpected error on socket_connect at line 5
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));

恩不用了,已经解决了。谢谢。 分享下经验,大家学习下