我使用UDP协议在C#中创建了一个聊天应用程序。我不想使用TCP。但它只能在我自己的网络/ wifi中工作。我为自己和我的朋友,或者可能是其他下载它的人做了这个,但它不起作用。我需要前进或其他什么吗?移植前进是没有意义的,因为我下载的所有其他程序都不要求我提前告诉:P。我怎样才能让它长途跋涉?这是我使用的代码:
接收数据:
static UdpClient UdpReciever = new UdpClient(PORT);
static byte[] data = new byte[512];
static void Main(string[] args)
{
while (true)
{
IPEndPoint EP = new IPEndPoint(IPAddress.Any, PORT);
data = UdpReciever.Receive(ref EP);
Otherclass oc = new Parser();
Otherclass.Parse(data);
}
}
public class Otherclass
{
public static void Parse(Byte[] data)
{
string received = Encoding.ASCII.GetString(data);
Console.WriteLine(received);
}
}
使用此代码发送数据:
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(this.Ip), port);
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
client.SendTo(ex.packetdata, ep);
答案 0 :(得分:1)
您无法将数据发送到互联网上的任何计算机上。您的客户端需要将公用IP和转发端口用于其计算机。如果他们没有公共IP,那么你需要一台服务器来处理消息。
答案 1 :(得分:0)
有两件事需要注意:
您创建的EP端点具有本地网络的IP地址,无法从外部访问。打印出来进行验证。
UDP数据包不一定完全按照发送方式接收。在本地网络上,您可能没有发现差异,但在更大的网络上进行一些测试。仔细查看UDP协议提供的保证。如果你试图纠正错误,你很快就会重新发明TCP,所以你最好也可以使用TCP。