求解:PHP socket 的问题
下面这段测试代码,我在本地用appserv搭建的环境,执行无误。而且可以用客户端连上去并执行。
<?php //Reduce errorserror_reporting(~E_WARNING); //Create a UDP socketif(!($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 addressif( !socket_bind($sock, "localhost" , 9999) ){ $errorcode = socket_last_error(); $errormsg = socket_strerror($errorcode); die("Could not bind socket : [$errorcode] $errormsg \n");} echo "Socket bind OK \n"; //Do some communication, this loop can handle multiple clientswhile(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);?>
但是,我放到vps上之后,它显示该端口是打开的,而且无法再次打开(第二遍执行这个脚本的时候,返回错误信息,端口已被占用)。我扫描端口发现9999确实已经是一个打开的UDP端口,但是,用客户端连得上去却没法完成通信(或许不可以发,或许不可以收,who knows。。。)
下面是phpinfo的结果,显示socket支持是打开的。(太长了,ctr+f后找到的socket都在这里了)
Configure Command './configure' '--prefix=/usr/local/php5' '--enable-force-cgi-redirect' '--enable-fastcgi' '--with-config-file-path=/usr/local/etc/php5/cgi' '--with-curl=/usr/local/lib' '--with-gd' '--with-gettext' '--with-jpeg-dir=/usr/local/lib' '--with-freetype-dir=/usr/local/lib' '--with-kerberos' '--with-openssl' '--with-mcrypt' '--with-mhash' '--with-mysql=/usr' '--with-mysqli=/usr/bin/mysql_config' '--with-pcre-regex=/usr/local' '--with-pdo-mysql=/usr' '--with-pear' '--with-png-dir=/usr/local/lib' '--with-xsl' '--with-zlib' '--with-zlib-dir=/usr/local/lib' '--enable-zip' '--enable-gd-native-ttf' '--with-iconv=/usr/local' '--enable-bcmath' '--enable-calendar' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-mbstring'
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
socketsSockets Support enabled
default_socket_timeout 60 60
额,哪位大牛有过经验,跪谢啊~
回复讨论(解决方案)
换一个端口号
已打开的端口,就不能重复打开
我把localhost手动改成了服务器IP,然后加上了set_time_limit(2);
执行的结果和上面一样。扫描显示端口已打开,但是客户端无法通信。
不过,我很快看到了这个:
The server encountered an internal error or misconfiguration and was unable to complete your request
换一个端口号
已打开的端口,就不能重复打开
恩,每次都有换的。
The server encountered an internal error or misconfiguration and was unable to complete your request
服务器遇到一个内部错误或配置错误,无法完成您的请求
The server encountered an internal error or misconfiguration and was unable to complete your request
服务器遇到一个内部错误或配置错误,无法完成您的请求
有什么建议没?比如查log,或者是怎么尝试?
看看防火墙什么的
9999 是已经打开的端口没错 但是你有没有9999这个端口有没有没其它的程序所占用 如果没有被其它的程序所占用那么可能考虑设置一下防火墙
否则的话 就换一个新的端口或者关闭占用9999端口的程序
也可以把那个程序换一个其它的端口
总之一个端口只能映射给一个程序
好吧,最后尝试无果,VPS上的防火墙也没法动。就这样吧。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸
