用PHP发送TCP数据包
我尝试使用php将TCP打包数据发送到某个ip,我使用以下代码发送它:用PHP发送TCP数据包,php,sockets,tcp,websocket,Php,Sockets,Tcp,Websocket,我尝试使用php将TCP打包数据发送到某个ip,我使用以下代码发送它: $socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //$bind=socket_bind($socket,'tcp://94.232.171.102'); socket_connect($socket, 'xx.xx.xx.xx', 9001); $buff='P\00\00\00\e5G\1f\b9\c6\acB\84\15\e7\b3*\17\ab\00
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//$bind=socket_bind($socket,'tcp://94.232.171.102');
socket_connect($socket, 'xx.xx.xx.xx', 9001);
$buff='P\00\00\00\e5G\1f\b9\c6\acB\84\15\e7\b3*\17\ab\00G2\n\9c\ba{\a9}\dab"\c31\ed\f7\94\fc\aeX\ab\13\r/\02\ce\83f\bc?\96q\10M\b0\f4\a0\b1\95X\d0\85\10\df$|\de$\b4\f6m\a9\ff%Z\b4\d8\aa\da\bb';
$length = strlen($buff);
$sent = socket_write($socket, $buff, $length);
但是,它不工作,也不发送,当我使用一些windows应用程序,比如设置它的发送数据包时,为什么我不能从本地主机上的php发送它,至少有一些错误处理,你有更好的机会找到错误
ini_set('display_errors', true); error_reporting(E_ALL); // <- for debugging purposes only
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ( !$socket ) {
$errno = socket_last_error();
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
if ( !socket_connect($socket, 'xx.xx.xx.xx', 9001) ) {
$errno = socket_last_error($socket);
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
$buff='P\00\00\00\e5G\1f\b9\c6\acB\84\15\e7\b3*\17\ab\00G2\n\9c\ba{\a9}\dab"\c31\ed\f7\94\fc\aeX\ab\13\r/\02\ce\83f\bc?\96q\10M\b0\f4\a0\b1\95X\d0\85\10\df$|\de$\b4\f6m\a9\ff%Z\b4\d8\aa\da\bb';
$length = strlen($buff);
$sent = socket_write($socket, $buff, $length);
if ( FALSE===$sent ) {
$errno = socket_last_error($socket);
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
else if ( $length!==$sent ) {
$msg = sprintf('only %d of %d bytes sent', $length, $sent);
trigger_error($msg, E_USER_NOTICE);
}
ini\u集('display\u errors',true);错误报告(E_ALL);// 通过至少一些错误处理,您有更好的机会找到错误
ini_set('display_errors', true); error_reporting(E_ALL); // <- for debugging purposes only
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ( !$socket ) {
$errno = socket_last_error();
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
if ( !socket_connect($socket, 'xx.xx.xx.xx', 9001) ) {
$errno = socket_last_error($socket);
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
$buff='P\00\00\00\e5G\1f\b9\c6\acB\84\15\e7\b3*\17\ab\00G2\n\9c\ba{\a9}\dab"\c31\ed\f7\94\fc\aeX\ab\13\r/\02\ce\83f\bc?\96q\10M\b0\f4\a0\b1\95X\d0\85\10\df$|\de$\b4\f6m\a9\ff%Z\b4\d8\aa\da\bb';
$length = strlen($buff);
$sent = socket_write($socket, $buff, $length);
if ( FALSE===$sent ) {
$errno = socket_last_error($socket);
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
else if ( $length!==$sent ) {
$msg = sprintf('only %d of %d bytes sent', $length, $sent);
trigger_error($msg, E_USER_NOTICE);
}
ini\u集('display\u errors',true);错误报告(E_ALL);//你能更具体一点问题是什么吗?$sent
的值是多少?你期待什么?发送什么,如果有的话?发送的答案是数字198,当它正常工作时,它必须在web应用程序上执行一项任务,但它不能与php代码一起工作,而是由具有相同设置的数据包发送器应用程序正确工作。那么实际的问题是什么?所以,$sent
应该是198,实际上是吗?问题是这段代码在现实世界(我的web应用程序监听此端口并接收数据)上不做任何操作,但如果我对数据包发送器使用此设置,它工作得很好…我们必须彼此忽略。我仍然不知道运行此代码时,$sent
的值是多少,尽管我已经问了您两次。您能更具体地说明问题是什么吗?$sent
的值是多少?你期待什么?发送什么,如果有的话?发送的答案是数字198,当它正常工作时,它必须在web应用程序上执行一项任务,但它不能与php代码一起工作,而是由具有相同设置的数据包发送器应用程序正确工作。那么实际的问题是什么?所以,$sent
应该是198,实际上是吗?问题是这段代码在现实世界(我的web应用程序监听此端口并接收数据)上不做任何操作,但如果我对数据包发送器使用此设置,它工作得很好…我们必须彼此忽略。我仍然不知道运行此代码时,$sent
的值是多少,尽管我已经问过你两次了。