socket通訊 php作為用戶端,C++作為服務端通訊問題。。。
最近想做一個如題這樣的東西,現在php發送能成功,C++做出正確的相應:發送一段json字串,但是C++發出的訊息php怎麼也收不到。。。不知道這是為什麼。。請大家幫幫忙 難道是C++傳給php的訊息格式有什麼問題?重點問題我感覺出在socket_read上。。但是沒搞明白
error_reporting(E_ALL);
set_time_limit(0);
echo "TCP/IP Connection
\n";
$port = 6000;
$ip = "127.0.0.1";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
echo "OK.\n";
}
echo "試圖串連 '$ip' 連接埠 '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}else {
echo "串連OK\n";
}
$in = 'r';
$out ='';
if(!socket_write($socket,$in,strlen($in))) {
echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}else {
echo "發送到伺服器資訊成功!\n";
echo "發送的內容為:$in
";
}
while($out = socket_read($socket,8192)) {
//echo "接收伺服器回傳資訊成功!\n";
//$obj=json_decode($out);
//echo "接受的內容為:",$out;
echo $out;
//echo $obj->0;
}
/*
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
echo 'aa'.$buf.'aa';
echo "Read $bytes bytes from socket_recv(). Closing socket...";
} else {
echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . " ";
}
*/
echo "關閉SOCKET...\n";
socket_close($socket);
echo "關閉OK\n";
?>
------解決思路----------------------
那不就是 如果一直沒有收到終止符 \0、\r、\n 則永遠停在等待輸入 的情況了
這說明服務端沒有發送結束符(也就是沒有遵守約定)
你也只能串連 socket_read($socket,1) 的結果了
其實讀一塊和讀一個位元組的效率是一樣的(都是從輸入緩衝區讀的)