Im пытается связываться между Go и PHP с помощью сокета. Код им с помощью является:PHP/Go socket communication
Перейти:
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);
Проблема заключается в том, что сервер Go продолжает думать, что это что-то получать все время так, он печатает «Сообщение ПОЛУЧАЛ: "постоянно. Если я делаю if (message! = ""), То это работает, но использование процессора велико.
Другая проблема заключается в том, что сервер не получает «тест», если я не прокомментирую socket_read ($ socket, 4); в PHP.
bufio.Reader.Readstring возвращает ошибку, которую вы не проверяете. – thwd
Если я проверяю ошибку, это говорит «E0F» – user3713080
Никогда не игнорируйте ошибки. Не создавайте новую «bufio.Reader» каждую итерацию через цикл! Ручка 'io.EOF'. –