我试图通过套接字与Go和PHP进行通信。使用代码IM是:PHP/Go套接字通信
转到:
fmt.Println("Launching server...")
ln, _ := net.Listen("tcp", ":8080")
conn, _ := ln.Accept()
for {
message, _ := bufio.NewReader(conn).ReadString('\n')
fmt.Print("Message Received:", string(message))
conn.Write([]byte("test" +"\n"))
}
PHP:
$address = gethostbyaddr($ip);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket === false){
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error());
}
$result = socket_connect($socket, $address, $port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket));
}
socket_write($socket, "test", 4);
socket_read($socket, 4);
的问题是,转到服务器总是在认为它接收的东西所有的时间,所以它打印“消息收到: “不断。如果我这样做(消息!=“”)它有点作品,但CPU使用率很高。
另一个问题是服务器没有收到“测试”,除非我注释掉socket_read($ socket,4);在PHP中。
bufio.Reader.Readstring返回一个你没有检查的错误。 – thwd
如果我检查错误说“E0F” – user3713080
永远不要忽略错误。不要在循环中每次迭代创建一个新的'bufio.Reader'!处理'io.EOF'。 –