C# 测试通过控制台发送UDP数据包时出现问题
这是我的客户代码C# 测试通过控制台发送UDP数据包时出现问题,c#,.net,networking,udp,C#,.net,Networking,Udp,这是我的客户代码 class Program { static void Main(string[] args) { string msg; Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.
class Program
{
static void Main(string[] args)
{
string msg;
Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 999);
sck.Bind(ep);
byte[] msgbytes;
while (true)
{
msg = Console.ReadLine();
msgbytes = ASCIIEncoding.ASCII.GetBytes(msg);
sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck);
Console.WriteLine("sent");
}
}
void callBack(IAsyncResult result)
{
((Socket)result.AsyncState).EndSendTo(result);
}
}
}
这是服务器代码
class Program
{
static void Main(string[] args)
{
string msg;
Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 999);
sck.Bind(ep);
byte[] msgbytes = new byte[100];
EndPoint client = (EndPoint)ep;
int bytesrec;
while (true)
{
bytesrec = sck.ReceiveFrom(msgbytes, 0, msgbytes.Length, SocketFlags.None, ref client);
msg = ASCIIEncoding.ASCII.GetString(msgbytes);
Console.WriteLine("4");
}
}
}
}
问题是,当我尝试使用客户端发送数据包时,服务器从未收到任何数据包。从未写入4,这将确认sck.receivefrom已执行。在客户端代码中更改以下内容: 而不是sck.Bindep;使用sck.Connectep; 而不是
sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck);
使用
它应该会起作用
编辑:
如果您真的需要使用异步发送。。。您可以执行以下操作:
IAsyncResult asyncres = sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck);
sck.EndSendTo(asyncres);
您的服务器需要在0.0.0.0进行监听,否则您将进入平台依赖领域;您的客户端需要绑定到外部IP地址,而不仅仅是127.0.0.1,否则它无法从本地主机发送任何数据包。-1。无法连接到可以绑定到的端点。这个概念甚至都没有意义。请不要在这里发布未经测试的猜测。我没有连接到绑定的端点。我告诉他替换代码…+1..BTW:Current BeginSendTo也可以,但我同意Send更好。@avi我在你的帖子中没有看到“ep”的任何新值,而且连接和绑定在客户端中都不是必需的。@downvoter我越来越认为无法解释的DownVote仅仅是站点破坏行为,应该被忽略。如果你有预约,让我们听听。
IAsyncResult asyncres = sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck);
sck.EndSendTo(asyncres);