PHP-套接字连接-从输入表单向服务器发送命令

PHP-套接字连接-从输入表单向服务器发送命令,php,Php,我正在尝试使用php套接字连接到服务器。我使用的php代码很好: <?php $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $host = "192.168.1.2"; $port=15000; settype($buffer,"string"); //$buffer="0 MAIN VERSION\0"; $len= strlen($buffer); socket_connect($sock, $host, $por

我正在尝试使用php套接字连接到服务器。我使用的php代码很好:

<?php
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$host = "192.168.1.2";
$port=15000;

settype($buffer,"string");

//$buffer="0 MAIN VERSION\0"; 

$len= strlen($buffer);

socket_connect($sock, $host, $port);
socket_sendto($sock, $buffer, $len, 0 , $host, $port);


echo( socket_read($sock, 65535) );

socket_close($sock);
?>

我想创建一个表单,输入表单中的$buffer变量,然后处理它。 问题是套接字连接没有连接,也没有收到任何错误。 以下是表格代码:

<html>
<head>
<title>TEST CMD</title>

<form action="send_cmd.php" method="POST" >

COMMAND:<input type="text" name="cmd" size="70">

<input type="submit" value="send cmd">

</form> 
</head>

测试指令
命令:
下面是send_cmd.php:

<?php

settype($buffer,"string");

$buffer= $_POST["cmd"];

$len= strlen($buffer);

ECHO $buffer;
ECHO $len;

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die('ERROR');
$host = "192.168.1.2";
$port=15000;
socket_connect($sock, $host, $port) or die('ERROR');;
socket_sendto($sock, $buffer, $len, 0 , $host, $port);

echo $buffer;
echo( "ANSWER: <P>".socket_read($sock, 65535) );

socket_close($sock); 
?>


有什么问题?应该能用,但不能用。谢谢

不是答案,但评论太长:

也许多一点调试输出就可以说明问题:
什么是

<?php
ini_set('display_errors', true); error_reporting(E_ALL); // for debugging purposes only
$buffer= $_POST['cmd'];
echo '<pre>buffer: '; var_dump($buffer); echo "</pre>\r\n"; flush();

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die('ERROR');
$host = "192.168.1.2";
$port=15000;
socket_connect($sock, $host, $port) or die('ERROR');
$cb = socket_sendto($sock, $buffer, $len, 0 , $host, $port);
echo '<pre>#sent: '; var_dump($cb); echo "</pre>\r\n"; flush();

$response = socket_read($sock, 65535);
echo '<pre>response'; var_dump($response); echo "</pre>\r\n"; flush();

应该可以工作,但它不工作
-不打印任何东西,甚至不打印“ECHO$buffer”部分,或者什么?ECHO$buffer打印正常,但套接字不执行任何操作。没有错误,什么都没有。如果我用一个手动写入的字符串替换$buffer内容,那么它可以正常工作。感谢您的帮助。我在浏览器中等待localhost,听起来像是一个阻塞套接字读取。。。。我在代码中放了一些flush()s,在
s之后换行符-也许,只是也许浏览器现在会向您显示部分结果,这样您至少可以检查发送的字节数,还可以检查输入字符串的字节数是否与字符数相匹配(您期望的)。我非常感谢您花费的时间和精力。每次回显后,我都会得到预期的结果,但最后一次带有read_套接字的回显创建了无限等待-确切地说,
var\u dump($buffer)的输出是什么现在测试脚本时(套接字读取挂起)?测试字符串以零结尾-不是字符
0
,而是一个值为零的字节。服务器可能会使用这个零字节来检测命令/消息的结尾。多亏了VolterK,我成功地解决了这个问题。我这样定义了缓冲区:$buffer=“0”。$\u POST['cmd']。“\0”;非常感谢你帮了我的忙!有一个愉快的周末!