Просто пытаются создать чат сервер-клиентNetworkStream.Read() не работает и бросает ArgumentOutOfRangeException
Это сервер ждет подключения клиента (по желанию) *
TcpListener serverSocket = new TcpListener(8888); int requestCount = 0; TcpClient clientSocket = default(TcpClient); serverSocket.Start(); Console.WriteLine(" >> Server Started"); clientSocket = serverSocket.AcceptTcpClient(); Console.WriteLine(" >> Accept connection from client");
Затем клиент подключается к серверу (по желанию) *
System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient(); clientSocket.Connect("127.0.0.1", 8888);
Тогда о п на сторону клиента, я отправить сообщение из формы окна, и событие нажатия кнопки делает это:
NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox2.Text + "$"); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); //this goes to the server ------> to the part (4) //returning from the server <------ byte[] inStream = new byte[10025]; serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize); string returndata = System.Text.Encoding.ASCII.GetString(inStream); textBox2.Text = ""; textBox2.Focus();
Наконец, на стороне сервера, бесконечную bucle для клиентских запросов. А вот где я получил эту проблему на networkStream.Read()
while ((true)) { try { requestCount = requestCount + 1; NetworkStream networkStream = clientSocket.GetStream(); byte[] bytesFrom = new byte[10025]; if (networkStream.DataAvailable) { **networkStream.Read(bytesFrom, 0, (int) clientSocket.ReceiveBufferSize);** string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$")); Console.WriteLine(" >> Data from client - " + dataFromClient); string serverResponse = "Last Message from client" + dataFromClient; Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse); networkStream.Write(sendBytes, 0, sendBytes.Length); networkStream.Flush(); Console.WriteLine(" >> " + serverResponse); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
Я отлаженной шаг за шагом (на сервере и клиенте), и все это хорошо, пока я не дойдете до networkStream.Read () и бросает ArgumentOutOfRangeException ... Пожалуйста, кто-нибудь мне поможет или скажите, где ошибка.
* Я говорю по желанию, потому что 1. и 2. шаги в порядке (по крайней мере, я думаю)
Вы должны передать 'bytesFrom.Length' вместо' clientSocket.ReceiveBufferSize' в 'networkStream.Read'. –
Каково значение 'clientSocket.ReceiveBufferSize'? –