C#使用tcp和udp协议

我需要在我的应用程序中使用udp和tcp连接,TcpClient / TcpListener很少会处于活动状态,但udp将成为主要用途.

这是服务器代码:

    static void Main(string[] args)
    {
        TcpListener  listener = new TcpListener(IPAddress.Any, 25655);
        listener.Start();
        Socket  sck = listener.AcceptTcpClient().Client;
        UdpClient udpServer = new UdpClient(1100);
        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
        var data = udpServer.Receive(ref remoteEP);
        string result = Encoding.UTF8.GetString(data);
        Console.WriteLine(result);
        Console.Read();
    }

这是客户:

   static void Main(string[] args)
    {
       TcpClient client = new TcpClient("127.0.0.1", 25655);
       Socket sck = client.Client;
       UdpClient udpclient = new UdpClient();
       IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1100); // endpoint where server is listening
       udpclient.Connect(ep);
       byte[] data = UTF8Encoding.UTF8.GetBytes("Hello");
       udpclient.Send(data,data.Length);       
    }

我首先建立了Tcp连接,然后我正在尝试连接并从客户端向服务器发送数据.
从我添加的断点,我可以看到Tcp部分正常工作,客户端完成程序,但在服务器中,它挂起在接收部分var data = udpServer.Receive(ref remoteEP);
就像没有数据到达..当我删除tcp代码部分(服务器和客户端的前两行)它工作得很好,显示结果消息.

有谁知道为什么我无法从客户端获取数据?

提前致谢.

最佳答案 UDP和TCP之间的主要区别在于TCP将尝试重新发送消息,直到服务器告知客户端已收到消息.即使数据包永远不会到达或主机根本不存在,UDP也会发送并忘记它

这是您的代码流程

服务器启动TCP
客户端发送TCP
服务器接收TCP
客户端发送UDP(服务器尚未监听,数据包丢失但UDP不关心)
服务器开始侦听UDP
等待UDP到来的服务器< —挂起 在尝试从客户端发送消息之前,您希望执行一些多线程编程并同时启动它们.

点赞