2015-02-10 56 views
0

我试图打包数据的TCP发送到某些IP与PHP的,我用下面的代码来发送:发送TCP数据包在PHP

$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应用程序,如Packet Sender设置它正确地发送数据包,为什么我不能发送它从本地主机上的PHP

+0

你能更具体地说明问题是什么吗? '$ sent'的价值是什么?你期望什么?如果有的话发送什么? – 2015-02-10 07:04:15

+0

发送的答案是198号,当它工作正常时,它必须在Web应用程序上执行一项工作,但它不适用于PHP代码,但可以通过相同设置的数据包发送方应用程序正确工作 – user3717270 2015-02-10 07:17:15

+0

那么实际问题是什么?所以'$ sent'应该是198,而且它实际上是? – 2015-02-10 07:18:10

回答

2

至少有一些错误处理,你有更好的机会找到错误。

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); 
}