Мне нужна программа для прослушивания нескольких машин, которые отправляют некоторые UDP по их статусу. Я вырезал и вставлял биты из чат-программы и получал работу, но при запуске я получаю сообщение об ошибке «Операция сокета не может быть выполнена, потому что в системе недостаточно места для буфера или потому, что очередь заполнена». Если I Ok ошибка, тогда все работает хорошо. В приведенном ниже коде, если я удалю While (true), я не получаю ошибку, но я получаю только одну запись. Я думал, но может ошибаться, что обратный вызов будет просто продолжать работать, и каждый раз, когда он получает данные, он отправит его на рассмотрение. Это я верю, где моя проблема, но я не могу понять, как ее исправить, и как я могу получать данные без опроса сокета?C# BeginReceiveFrom дает мне ошибку
private void Form1_Load(object sender, EventArgs e)
{
try
{
CheckForIllegalCrossThreadCalls = false;
//We are using UDP sockets
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//Assign the any IP of the machine and listen on port number 701
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 701);
//Bind this address to the server
serverSocket.Bind(ipEndPoint);
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);
//The epSender identifies the incoming clients
EndPoint epSender = (EndPoint)ipeSender;
while (true)
{
//Start receiving data
serverSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epSender, new AsyncCallback(OnReceive), epSender);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "SGSServerUDP", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Пожалуйста, введите код для 'OnReceive', если возможно [в качестве редактирования вашего вопроса] (http://stackoverflow.com/posts/25769099/edit). –
Удалите ужасное назначение CheckForIllegalCrossThreadCalls. Удалите принципиально неправильный цикл while (true). Теперь у вас будет гораздо больше шансов написать правильный код. –