2010-09-09 1 views
0

Когда я использую netcat для отправки udp-запроса, я получаю полный ответ. Когда я использую класс UDPCLIENT в C#, я не получаю полный ответ, он прерван. Вот мой кодC# udpclient response cut short

byte[] data = new byte[1024]; 
      string stringData; 

      UdpClient server = new UdpClient(currentIP, currentport); 

      IPEndPoint send = new IPEndPoint(IPAddress.Any, 0); 

      string query = "\\players\\"; 
      data = Encoding.ASCII.GetBytes(query); 
      server.Send(data, data.Length); 

      data = server.Receive(ref send); 


      stringData = Encoding.ASCII.GetString(data, 0, data.Length); 

      MessageBox.Show(stringData); 

Как увеличить буфер приема, чтобы он сохранял полный ответ UDP?

+0

Вы пытались получить еще раз, чтобы узнать, не остался ли остальная часть ответа? – Aren

+0

привет, если я снова запустил метод получения, я не получаю больше данных, и иногда он будет зависать: < – brux

ответ

2

Первый: UDP не является гарантированным протоколом; вполне возможно, что сообщение потеряно и постоянно недоступно.

Во-вторых, только потому, что вы вызвали прием, это не значит, что у вас есть все. Вам необходимо продолжать получать и анализировать полученные данные до тех пор, пока какой-либо протокол на уровне приложения, который вы используете (в вашем примере, похоже, отсутствует) говорит вам, что пришло время прекратить прием и обработку сообщения.

+0

Привет, спасибо за ваш ответ. существует определенность в том, сколько данных проходит через них, это не потерянные пакеты. его же количество я получаю каждый раз. Если я использую netcat для отправки udp-запроса, я получаю все данные обратно. если я попробую server.Receive (ref send); во второй раз больше нет данных, я что-то упускаю ?, – brux