Сетевой поток читается, когда сокет закрыт

Вам нужно посмотреть пример Backgroundworker: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx Особенно, как он взаимодействует с уровнем пользовательского интерфейса , Основываясь на вашей публикации, это, похоже, отвечает на ваши вопросы.

2
задан KansaiRobot 17 January 2019 в 03:54
поделиться

1 ответ

Оба

Если клиентский сокет (который связан с NetworkStream) закрыт до того, как вы позвоните Read, он выбрасывает исключение ввода-вывода.

Если сокет сервера закрыт во время (или до этого) Read, он может вернуть 0, что означает, что сервер ничего не отправил.

Некоторые примеры:

var server = new Socket(SocketType.Stream, ProtocolType.Tcp);
var client = new Socket(SocketType.Stream, ProtocolType.Tcp);

/* Init the server socket */
server.Bind(new IPEndPoint(IPAddress.Any, 19998));
server.Listen(50);
server.BeginAccept(ar =>
{
    var server2 = server.EndAccept(ar);
    //server2.Close(); // Read will return 0
},
null);

/* Init the client socket */
client.Connect(IPAddress.Loopback, 19998);
NetworkStream stream = new NetworkStream(client);
//client.Close(); // Read will throw IOException
var buf = new byte[128];
int read = stream.Read(buf, 0, 128);
0
ответ дан shingo 17 January 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: