c # — PHP сокет закрывается принудительно клиентом

Я создал сервер сокетов PHP. Я подключился к нему с помощью telnet или putty, и все работает хорошо, пока я не попытался подключиться к приложению .Net, каждый раз, когда я запускаю приложение, оно закрывает сервер, вот мой код C #, только две строки:

System.Net.Sockets.TcpClient cli = new System.Net.Sockets.TcpClient("192.168.0.200", 10000);
cli.Close();

Когда я запускаю приложение, сервер сокетов PHP закрывается с этой ошибкой:

Warning: socket_read(): unable to read from socket [0]: An existing connection was forcibly closed by the remote host

Я пытался закомментировать Cli.close() и, конечно же, сокет оставался открытым до тех пор, пока приложение C # не будет закрыто, а затем закроется с тем же сообщением об ошибке выше.

Так в чем же причина проблемы? Клиент не должен закрывать сокет таким образом.

Спасибо

2

Решение

Глядя на код на http://php.net/manual/en/sockets.examples.php Я не вижу никаких проблем с этим. Этот код существует сценарий, когда сокет закрыт:

if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}

Я могу предложить изменить код следующим образом:

if (false === ($buf = @socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break;
}

Добавление ‘@’ предотвратит появление предупреждения. изменения break 2; в break; заставит сервер не выходить, а продолжать ждать следующего соединения.

Если это не сработает, вы можете перенести весь скрипт в другой do { } while() цикл, так что каждый раз, когда чтение сокета терпит неудачу php do socket_create() снова.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]