Асинхронный прием датаграмм на 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);