【发布时间】:2018-12-30 11:05:27
【问题描述】:
我当时在 c# 中使用 XXXAsync 方法和 socketeventargs 在测试我的控制台应用程序时,没有发送数据(本地 - 在电脑内),并且此代码在发件人应用程序中没有引发错误。
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("++++++++++++++++++++++++");
}
但是当 try catch 块中的 connect() 代码被取消注释时,这个应用程序成功发送了数据。它还发送数据时
FlashUDP.SendTo("dat1", send_ipep);
被用于
FlashUDP.SendAsync(Sock_Args);
是我遗漏了什么还是 udp 的工作方式? 如果
"SentTo()"
然后在没有连接的情况下工作
"SendAsync()"
也应该在没有连接的情况下工作。 连接对于客户端来说不是问题,但对于服务器来说却是一个问题,因为它必须处理许多客户端。 当我不绑定()接收器时,不会发送数据。 有什么解决办法吗? 谢谢!
【问题讨论】:
-
你是否设法在没有
Connect的情况下使用SendTo? -
@ckuri 这不是等待/异步,它是旧类型的回调异步
-
@MikeNakis 是的
SendTo()没有Connect()工作