Пытаюсь отправить картинку Image с клиента на сервер используя классы TcpClient, TcpListener. Проблема в том что даже половины изображения не доходит, вместо нее просто серые пиксели. Код клиента (Отправляет картинку на сервер в виде байтов) using (TcpClient client = new TcpClient()) { client.Connect(IPAddress.Parse(address), port); NetworkStream nwStream = client.GetStream(); MemoryStream memoryStream = new MemoryStream(); Image screen = CaptureScreen(); screen.Save(memoryStream, ImageFormat.Jpeg); byte[] data = memoryStream.ToArray(); nwStream.Write(data, 0, data.Length); nwStream.Flush(); client.Close(); } Код using (TcpClient client = new TcpClient()) { client.Connect(IPAddress.Parse(address), port); NetworkStream nwStream = client.GetStream(); MemoryStream memoryStream = new MemoryStream(); Image screen = CaptureScreen(); screen.Save(memoryStream, ImageFormat.Jpeg); byte[] data = memoryStream.ToArray(); nwStream.Write(data, 0, data.Length); nwStream.Flush(); client.Close(); } Код сервера (Принимает картинку и ставит в pictureBox) TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), port); server.Start(); while (true) { TcpClient clientCopy = server.AcceptTcpClient(); NetworkStream nwStream = clientCopy.GetStream(); byte[] buffer = new byte[clientCopy.ReceiveBufferSize]; int bytesRead = nwStream.Read(buffer, 0, clientCopy.ReceiveBufferSize); MemoryStream imageStream = new MemoryStream(buffer); Image returnImage = Image.FromStream(imageStream); if (returnImage != null) { pictureBox1.BackgroundImage = returnImage; pictureBox1.Refresh(); } } Код TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), port); server.Start(); while (true) { TcpClient clientCopy = server.AcceptTcpClient(); NetworkStream nwStream = clientCopy.GetStream(); byte[] buffer = new byte[clientCopy.ReceiveBufferSize]; int bytesRead = nwStream.Read(buffer, 0, clientCopy.ReceiveBufferSize); MemoryStream imageStream = new MemoryStream(buffer); Image returnImage = Image.FromStream(imageStream); if (returnImage != null) { pictureBox1.BackgroundImage = returnImage; pictureBox1.Refresh(); } }
> Проблема в том что даже половины изображения не доходит, вместо нее просто серые пиксели. Всё правильно, ты же используешь ReceiveBufferSize, а он по умолчанию 8192 байтиков. Т.е. за 1 раз ты считываешь с потока 8192 байтика, поэтому и картинка у тебя не полностью скачивается. Выше так верно написали, что сервак кидает поток и сразу же закрывается, а сервак не успевает прочитать весь