Клиент + Сервер, асинхронные сокеты - C#
Формулировка задачи:
Привет!
Пишу клиент серверное приложение на основе асинхронных сокетов. Цель передача картинки. Основа сокета была взята из примера на msdn. Но я столкнулся с проблемой, которую так и не смог пока решить.
Собственно сначала код:
-Клиент
-Сервер
Вопрос следующий:
Мне на стороне сервера надо заранее(до вызова метода BeginReceive) знать размерность буфера, что бы потом успешно декодировать массив байт в bitmap. Но как именно узнать эту размерность ни как не могу понять.
И ещё как происходит присвоение значений буфера клиента буферу сервера. Т.е в дебаге сразу после выполнения метода BeginReceive значения всех байт буфера клиента присваиваются полю state.buffer сервера. Но для меня это происходит на столько не явно, что совсем не понятно)
Bitmap picture = new Bitmap(msg); TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap)); byte [] buffer = (byte[])tc.ConvertTo(picture, typeof(byte[])); this.client_socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(SendCallBack), this.client_socket);
class StateObject { public Socket workSocket = null; //сокет клиента public int bufferSize = 999999; //максимальные размер буфера public byte[] buffer;// = new byte[999999]; //буфер public StringBuilder sb = new StringBuilder(); //полученные данные в виде строки }
StateObject state = new StateObject(); //state.buffer = new byte[]; state.workSocket = this.client_socket; state.workSocket.BeginReceive(state.buffer, 0, state.bufferSize, SocketFlags.None, new AsyncCallback(ReceiveCallBack), state);
Решение задачи: «Клиент + Сервер, асинхронные сокеты»
textual
Листинг программы
bytesRead = connection.Socket.EndReceive(result);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д