Я работал с методами XXXAsync и socketeventargs в c #, тогда при тестировании моего консольного приложения данные не отправлялись (локально - на ПК), и с этим кодом в приложении-отправителе не было выдано никакой ошибки.
public class Client
{
private static Socket FlashUDP = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
private static IPEndPoint send_ipep = new IPEndPoint(IPAddress.Parse("192.168.100.41"), 14086);
private static IPEndPoint rec_ipep = new IPEndPoint(IPAddress.Parse("192.168.100.41"), 14085);
private static SocketAsyncEventArgs Sock_Args = new SocketAsyncEventArgs();
private static SocketAsyncEventArgs Sock_Args2 = new SocketAsyncEventArgs();
private static byte[] dat1 = new byte[10];
//This function is called at main
private static void starter()
{
Sock_Args.RemoteEndPoint = send_ipep;
Sock_Args.Completed += Sock_Args_Completed;
string st = "ping";
byte[] msg = Encoding.ASCII.GetBytes(st);
Sock_Args.SetBuffer(msg, 0, 4);
// FlashUDP.SendTo(msg, rec_ipep);
try
{
FlashUDP.Bind(rec_ipep);
// FlashUDP.Connect(send_ipep);
FlashUDP.SendAsync(Sock_Args);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("Sending...");
}
private static void Sock_Args_Completed(object sender, SocketAsyncEventArgs e)
{
Console.WriteLine("sent sucessfully ");
Console.WriteLine("++++++++++++++++++++++++");
}
Но это приложение успешно отправило данные, когда этот код connect () в блоке try catch не был прокомментирован.Он также отправлял данные, когда
FlashUDP.SendTo("dat1", send_ipep);
использовался вместо
FlashUDP.SendAsync(Sock_Args);
Я что-то упустил или это так работает UDP?То, что я предполагал, если
"SentTo()"
работает без подключения, то
"SendAsync()"
также должно работать без подключения.Подключение не является проблемой для клиента, но это проблема для сервера, так как приходится иметь дело со многими клиентами.плюс данные не передаются, когда я не связываю () получателя.Есть ли решение для этого?Спасибо!