如何通过UDP将数据从服务器传递到客户端?

时间:2017-04-26 02:59:53

标签: c# networking network-programming udp protocols

为什么这不起作用?

           Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        IPEndPoint ipserv = new IPEndPoint(IPAddress.Parse("46.174.48.47"), 46535);
        IPEndPoint ipLoc = new IPEndPoint(IPAddress.Parse("86.64.47.13"), 755);
        client.Connect(ipserv);
        byte[] data = Encoding.UTF8.GetBytes(Console.ReadLine());
        client.Send(data);
        client.Bind(ipLoc);
        client.Receive(data);
        Console.WriteLine(data);

错误: 类型" System.Net.Sockets.SocketException"的未处理异常System.dll中 附加信息:收到无效参数

我从控制台向服务器发送文本,然后想从服务器上取回它。怎么做?

2 个答案:

答案 0 :(得分:0)

我认为服务器和客户端的IPAndress是相同的

答案 1 :(得分:0)

您并未具体说明发生异常的位置。但是,看一下代码,我猜它会发生在client.Bind()方法调用上。原因是,当您调用client.Send()时,此时网络层会为您的套接字分配一个端口号。然后,您尝试呼叫Bind()以分配本地IP地址和端口号将失败,因为端口号无法更改且已分配。

您的问题在细节上很少,但我建议您根本不打扰ipLoc。只有服务器端点需要具有固定的端口号。最好让客户端套接字通过网络层隐式分配其端口(和IP地址)。

如果这不能解决您的问题,请改进问题,使其包含可靠地再现问题的好Minimal, Complete, and Verifiable code example,并更准确地解释发生了什么。请务必包含任何错误消息的确切文本以及任何抛出异常的完整堆栈跟踪。