这是我的客户端代码
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.receive。
答案 0 :(得分:1)
在您的客户端代码中更改以下内容:
而不是sck.Bind(ep);
使用sck.Connect(ep);
而不是
sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck);
使用
sck.Send(msgbytes, msgbytes.Length, SocketFlags.None);
它应该有用......
编辑: 如果你真的需要使用异步发送...你可以做类似的事情:
IAsyncResult asyncres = sck.BeginSendTo(msgbytes, 0, msgbytes.Length, SocketFlags.None, ep, null, sck);
sck.EndSendTo(asyncres);
答案 1 :(得分:-2)
您的服务器需要以0.0.0.0的速度收听,否则您将进入平台依赖领域; 和您的客户端需要绑定到外部IP地址,而不仅仅是127.0.0.1,否则它无法从本地主机发送任何数据包。