Асинхронный клиент: сервер подаёт 4440 байт, приходит 2048 - C#
Формулировка задачи:
Здравствуйте. Клиент - Сервер на разных компьютерах.Посылается на сервер "Начать передавайть данные" Сервер подаёт 4440байт..я получаю всего 2048 в socket.Available = 2392. в чём ошибка?
Делал всё также только вывод Асинхронный чз BeginReceive..всё тоже самое получаю 2048 байт..
всё бы ничего только это массив структур по 148байт.следовательно 2048 не делится на 148 и я не могу вывести структуру в контролл..нужно склеивать байты?как над помнить Клиенту что пакет 4400байт?
Socket s;
IPEndPoint EndPoint = new IPEndPoint(IPAddress.Parse("192.168.10.100"), 6000);
byte[] buf = new byte[9000];
private unsafe void GetDataBridge_Click(object sender, EventArgs e)
{
try
{
s = new Socket(EndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
s.BeginConnect(EndPoint, new AsyncCallback(ConnectCallBack), s);
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
}
private void ConnectCallBack(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
client.EndConnect(ar);
//label3.Text = s.Connected.ToString();
client.Send(BitConverter.GetBytes((short)515));
byte[] l = Encoding.ASCII.GetBytes(DeviceTB.Text);
byte[] k = Encoding.ASCII.GetBytes(FileNameTB.Text);
byte[] p = new byte[40];
Array.Copy(l, 0, p, 0, l.Length);
Array.Copy(k, 0, p, 20, k.Length);
client.Send(p);
//Thread.Sleep(100);
//client.BeginReceive(buf, 0, buf.Length, 0, new AsyncCallback(ReceiveCallback), buf);
while (true)
{
int read = client.Receive(buf);
Invoke(new Action(() =>
{
textBox1.AppendText(client.Available.ToString()+ " ");
}));
//Вывод данных в DataGridView
EndReceiveByte(buf, read);
}
}
catch (Exception e)
{
MessageBox.Show(e.Message, e.Source);
}
}Решение задачи: «Асинхронный клиент: сервер подаёт 4440 байт, приходит 2048»
textual
Листинг программы
private void Receive(IAsyncResult ar)
{
Temp temp = (Temp)ar.AsyncState;
Socket client = temp.socket;
int count = client.EndReceive(ar);
while (count < messageSize)
{
////////////Вот ТУТ СИНХРОННОЕ ПОЛУЧЕНИЕ
int read = client.Receive(temp.buffer, count, messageSize - count);
count += read;
}
BeginInvoke(new Action(() =>
{
for (int i = 0; i < read; i = i + 4)
{
textBox1.AppendText(String.Format(" {0}", BitConverter.ToSingle(temp.buffer, i)));
}
//ТУТ АСИНХРОННОЕ ПОЛУЧЕНИЕ
client.BeginReceive(temp.buffer, 0, temp.buffer.Length, 0, new AsyncCallback(Receive), temp);
}));
//И ТУТ АСИНХРОННОЕ ПОЛУЧЕНИЕ
client.BeginReceive(temp.buffer, 0, temp.buffer.Length, 0, new AsyncCallback(Receive), temp);
}