C# 使用 tcp 和 udp 协议(protocol)

标签 c# sockets tcp network-programming 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 到来 <--- 挂起

您想进行一些多线程编程,并在尝试从客户端发送消息之前同时启动它们。

关于C# 使用 tcp 和 udp 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39208395/

相关文章:

c# - while/for 循环直到出现特定条件

c# - 字符串泛型约束的值类型部分

c++ - 关闭 AF_PACKET 与 AF_INET 的时间差?

Java NIO 套接字 : the server doesn't receive the second message over the same socket

c# - 为什么 TcpClient 与构造函数中的参数连接速度较慢?

javascript - Node.js 网络库 : getting complete data from 'data' event

c++ - 用 C 处理 TCP 的部分返回

c# - 如何使用 C# 在 SQL Server 数据库中存储哈希值?

c# - Ef core 为名称为 *ID1 的导航属性创建附加列

c# - 防止TcpClient的NetworkStream ReadTimeout关闭套接字