代碼如下:
$socket_client = stream_socket_client('192.168.31.103:7272', $errno, $errstr);
stream_set_blocking($socket_client, 0);
if (!$socket_client) {
die("$errstr ($errno)");
} else {
$package_data = array('a'=> 'b',);
$package = json_encode($package_data);
$res = fwrite($socket_client, $package);
usleep(100000);
debug(fread($socket_client, 1000000));
fclose($socket_client);
}
運行結果是:HTTP/1.1 400 Bad Request
請問:和傳的是json有關么,我換了‘a(chǎn)ef’就沒這個問題,但是不知道如何解決,因為需要json格式。
無論發(fā)的是json還是字符串,服務器都會顯示client:192.168.31.103:62155 gateway:127.0.0.1:7272 client_id:7f00000108fc00000025 onClose:'' 代表將client踢掉了。。服務器是你們的聊天服務器,不知道是什么原因,可能因為內容格式的問題么。求大神指點~~~
你的服務端7272端口應該是websocket協(xié)議,發(fā)送的數(shù)據(jù)應該以websocket協(xié)議格式發(fā)送,不是隨便發(fā)個數(shù)據(jù)服務端就能識別。
這個問題就像你用stream_socket_client發(fā)起一個socket連接數(shù)據(jù)庫的3306端口,然后隨便發(fā)個數(shù)據(jù),mysql同樣不能識別一樣。服務端無法識別你傳輸?shù)臄?shù)據(jù),自然認為是非法數(shù)據(jù),然后斷開連接。
你要以對方能讀懂的數(shù)據(jù)格式(協(xié)議)發(fā)送才行。
為什么要自己建立socket連websocket端口?websocket協(xié)議比較復雜,不建議手寫代碼模擬websocket協(xié)議去傳輸數(shù)據(jù)。