Существует задача Есть Сервер и Клиент. Клиент делает скрин и отправляет скрин на Сервер. Проблема в сервере. Сервер Переделовает массив байтов imga в Картинку Запустил я сервер запустил клиент. Клиент отсылает серверу байты он их преобразовует но бывает такая ситуация когда сервер пишет: Клиент отсылает 5 - 6 скриншотов и появляется ошибка.
Распиши, что находится в Exception. Тип, сообщение, стек и вложенные исключения, если есть. По тому, что есть - полагаю, что в буфере приходят некорректные данные, и Image.FromStream() вылетает. Но это мнение ничем не обосновано
Bers обновил скрин Вполне возможно. Но я думаю тут что-то другое. Поскольку если посмотреть разницу между массивом в клиенте и сервере она одинаковая.
Вообще вылетает именно Image.FromStream(). Сюда по рефлектору - вылетает она из-за того, что stream, который в нее передается, == null. Либо из-за некорректного формата данных. Сюда по всему - скорее всего данные в буфере поврежены. Может быть, где-то что-то в буфер пишется не до конца. Либо пишется все, но не все пишется правильно
Проблема так и не решена! Решилось что проблема в передаче длины массива imga. Сервер : Клиент : Ошибка на сервере : Вот исходники : http://zalil.ru/29670069
Ааа блин, тьфу ты...byte[] buff = new byte[1024]; вынеси за цикл, сделай вот так: PHP: private void button1_Click(object sender, EventArgs e) { TcpListener tcpL = new TcpListener(10); tcpL.Start(); TcpClient s = tcpL.AcceptTcpClient(); byte[] imga; byte[] buff = new byte[1024]; for (int i = 0; i < 100; i++) { Application.DoEvents(); s.Client.Receive(buff); int len = BitConverter.ToInt32(buff, 0); imga = new byte[len]; s.Client.Receive(imga); this.pictureBox1.Image = byteArrayToImage(imga); } } У тебя же переполнение буфера получается ^_^
Проблема так и не решена прошу помощи. Сделайте хотяб так. Клиент делает скрин отправляет серверу. Сервер принимет отобржает. И так по циклу.
Вот немного лучше написал все равно некоректно работает! PHP: Скачать http://filesurf.ru/207803 Server: WaitForData(); Code: byte[] m_DataBuffer = new byte[1000000]; IAsyncResult m_asynResult; AsyncCallback pfnCallBack; Socket m_socClient; Code: public void WaitForData() { byte[] a = new byte[1]; if (pfnCallBack == null) pfnCallBack = new AsyncCallback(OnDataReceived); m_socClient.Send(a); m_asynResult = m_socClient.BeginReceive(m_DataBuffer, 0, m_DataBuffer.Length, SocketFlags.None, pfnCallBack, null); m_asynResult.AsyncWaitHandle.WaitOne(); this.pictureBox1.Image = byteArrayToImage(ms.ToArray()); } public void OnDataReceived(IAsyncResult asyn) { int a = m_socClient.EndReceive(asyn); ms.Position = 0; ms.Write(m_DataBuffer, 0, a); //this.listBox1.Items.Add(m_DataBuffer[30000].ToString()); } Client: Code: while (true) { byte[] a = new byte[1]; client.Client.Receive(a); byte[] buffer = ImageToByte(CaptureScreenShot()); client.Client.Send(buffer); } 20-30 скринов и Error;