C# 在C语言中在计算机之间发送udp数据包#
我试图在本地网络中从一台计算机向另一台计算机发送udp数据包。一台计算机运行Windows 10,另一台运行Ubuntu 18.04 到目前为止,我掌握的代码如下: 服务器:C# 在C语言中在计算机之间发送udp数据包#,c#,sockets,udp,C#,Sockets,Udp,我试图在本地网络中从一台计算机向另一台计算机发送udp数据包。一台计算机运行Windows 10,另一台运行Ubuntu 18.04 到目前为止,我掌握的代码如下: 服务器: using System; using System.Net.Sockets; using System.Net; namespace udpTest { class Program { static void Main(string[] args) {
using System;
using System.Net.Sockets;
using System.Net;
namespace udpTest
{
class Program
{
static void Main(string[] args)
{
string hostName = Dns.GetHostName();
string ip = Dns.GetHostEntry(hostName).AddressList[0].ToString();
IPAddress ipadd = IPAddress.Parse(ip);
var serverEndPoint = new IPEndPoint(ipadd, 20020);
var udp = new UdpClient(ipadd.ToString(), 20020);
while (true) {
var recvData = udp.ReceiveAsync().Result;
System.Console.WriteLine($"received: {recvData.Buffer}");
}
}
}
}
static void Main(string[] args)
{
var serverEndPoint = new IPEndPoint(IPAddress.Any, 20020);
var udp = new UdpClient(serverEndPoint);
while (true) {
var recvData = udp.ReceiveAsync().Result;
System.Console.WriteLine($"received: {recvData.Buffer}");
}
}
客户:
using System;
using System.Net.Sockets;
using System.Net;
namespace C_
{
class Program
{
static void Main(string[] args)
{
var udp = new UdpClient();
var bytes = BitConverter.GetBytes(420);
var i = udp.SendAsync(bytes, bytes.Length, "fe80::7077:8d67:4984:c9bc%43", 20020 ).Result;
System.Console.WriteLine($"sent: {i}");
}
}
}
(我稍微更改了ipv6地址,但格式完全相同)。
我在发送时没有收到任何错误,它只是通过,但服务器没有捕捉到它。我不知道我做错了什么。因此,任何指点都将不胜感激
编辑:更新的代码在lan内工作,但在lan外不工作。
客户:
服务器:
using System;
using System.Net.Sockets;
using System.Net;
namespace udpTest
{
class Program
{
static void Main(string[] args)
{
string hostName = Dns.GetHostName();
string ip = Dns.GetHostEntry(hostName).AddressList[0].ToString();
IPAddress ipadd = IPAddress.Parse(ip);
var serverEndPoint = new IPEndPoint(ipadd, 20020);
var udp = new UdpClient(ipadd.ToString(), 20020);
while (true) {
var recvData = udp.ReceiveAsync().Result;
System.Console.WriteLine($"received: {recvData.Buffer}");
}
}
}
}
static void Main(string[] args)
{
var serverEndPoint = new IPEndPoint(IPAddress.Any, 20020);
var udp = new UdpClient(serverEndPoint);
while (true) {
var recvData = udp.ReceiveAsync().Result;
System.Console.WriteLine($"received: {recvData.Buffer}");
}
}
请首先尝试IPAddress。自使用Dns.GetHostEntry(主机名).AddressList[0].ToString()中的第一个IP地址后的任何IP地址不保证是您正在使用的IPv6地址,特别是当计算机有多个网络适配器时 第二种方法是使用为
UdpClient
构造函数创建的serverEndPoint
// Use IPAddress.Any
IPAddress ipadd = IPAddress.Any;
var serverEndPoint = new IPEndPoint(ipadd, 20020);
// Use the serverEndPoint for the UP
var udp = new UdpClient(serverEndPoint);
第三,检查服务器的防火墙设置,确保允许在端口20020上传入UDP消息(默认情况下,Windows和Ubuntu都不允许)。并检查客户端防火墙设置,确保端口20020上的传出UDP消息是允许的(默认情况下,Windows和Ubuntu都允许这样做)。您是否尝试了
IPAddress。是否有用于侦听?感谢您的回复。我试着做你提到的(将服务器端点设置为IPAddress.Any,检查连接是否被阻塞等),我可以获得与本地路由器IP(192.168.1.117)的连接。然而,如果我想连接路由器之间,它仍然不能做到这一点。和往常一样,我没有收到任何错误,我更新了OP中的代码。