Асинхронный прием датаграмм на Socket - C#
Формулировка задачи:
Здравствуйте, возникла проблемка, а именно почему то в асинхронном режиме данные на сокет не приходят. С отправкой все в порядке. Вот есть код:
public class ClientUDP { public event ByteReceiveEventHandler ByteReceive; public delegate void ByteReceiveEventHandler(byte[] data, int size); public event ErrorEventHandler Warning; public delegate void ErrorEventHandler(); public Socket socket, listen; IPEndPoint listenEP; EndPoint remEP; public byte[] Buffer = new byte[257]; private int buf_size = 256; public int BufferSize { get { return BufferSize; } set { Buffer = new Byte[value + 1]; buf_size = value; } } public ClientUDP() { } public ClientUDP(string ip, int port) { socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint tmp = new IPEndPoint(IPAddress.Parse(ip), port); remEP = (EndPoint)(tmp); } public void Bind(string ip, int port) { socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint tmp = new IPEndPoint(IPAddress.Parse(ip), port); remEP = (EndPoint)(tmp); } public void Send(byte[] buffer) { socket.BeginSendTo(buffer, 0, buffer.Length, SocketFlags.None, remEP, new AsyncCallback(SendCallback), socket); } public void Listen(int port) { listen = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); listenEP = new IPEndPoint(IPAddress.Any, port);//слушаем 11000 порт listen.Bind(listenEP); EndPoint EP = new IPEndPoint(IPAddress.Any, 0); listen.BeginReceiveFrom(Buffer, 0, buf_size, SocketFlags.None, ref EP, new AsyncCallback(ReceiveCallback), listen); } private void ReceiveCallback(IAsyncResult ar) { Socket tmp = (Socket)ar.AsyncState; int size = tmp.EndReceiveFrom(ar, ref remEP); if (size > 0) { ByteReceive(Buffer, size); } listen.BeginReceiveFrom(Buffer, 0, buf_size, SocketFlags.None, ref remEP, new AsyncCallback(ReceiveCallback), listen); } private void SendCallback(IAsyncResult ar) { Socket tmp = (Socket)ar.AsyncState; tmp.EndSendTo(ar); } }
Все, проблема решена, я случайно ошибся с номером порта. Код полностью рабочий.
Решение задачи: «Асинхронный прием датаграмм на Socket»
textual
Листинг программы
ByteReceive(Buffer, size);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д