Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试通过控制台发送UDP数据包时出现问题_C#_.net_Networking_Udp - Fatal编程技术网

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);