【问题标题】:Network Programming - Applications Communication网络编程 - 应用程序通信
【发布时间】:2016-06-27 18:14:42
【问题描述】:

我正在开发新软件,我需要在这些应用程序之间进行交流,例如 TeamViewer 和 Skype。对于这个挑战,我阅读了太多文章并编写了代码,但我做不到。我必须使用 TCP,它不能是 UDP。数据安全对我的应用非常重要。

http://www.codeproject.com/Articles/807861/Open-NAT-A-NAT-Traversal-library-for-NET-and-Mono

我发现 N(etwork)A(address)T(ranslation) 可以解决我的问题并使用它。我按照他们所说的编写了相同的代码,但仍然无法正常工作......

监听器客户代码

NatDiscoverer discoverer = new NatDiscoverer();
CancellationTokenSource cts = new CancellationTokenSource(5000);
NatDevice device = await discoverer.DiscoverDeviceAsync(PortMapper.Upnp, cts);

// display the NAT's IP address
Console.WriteLine("The external IP Address is: {0} ", await device.GetExternalIPAsync());

// create a new mapping in the router [external_ip:1702 -> host_machine:1602]
await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 1602, 1702, "For testing"));

IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 1602);
socket = new Socket(endPoint.AddressFamily, SocketType.Stream,ProtocolType.Tcp);
socket.SetIPProtectionLevel(IPProtectionLevel.Unrestricted);
socket.Bind(endPoint);
socket.Listen(4);

请求发件人客户代码

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("100.96.106.192"), 1602);
                sock.Connect(ipep);

他们是 2 个客户,我想像这样联系他们。 “100.96.106.192”是计算机公共IP(不是路由器(外部)IP)..

对于这个挑战,我也可以使用除 WCF 之外的其他语言或其他库,因为我的应用需要独立于平台工作。

例如,我启动 Listener Client 并进入 'cmd',我写了 'netstat -a' 我看到,它监听的是 0.0.0.0:1602。但是为什么呢?

请帮助我并指导我。我的代码有什么问题?我究竟做错了什么?我怎么解决这个问题?

感谢所有答案和帮助。祝你有美好的一天,干得好......

【问题讨论】:

    标签: c# sockets network-programming p2p nat


    【解决方案1】:

    它正在侦听0.0.0.0,因为您已将IpAddress.Any 传递给侦听“所有 IPv4 接口”的侦听器。这应该在 netstat 中显示为 0.0.0.0

    根据微软:

    提供一个 IP 地址,指示服务器必须侦听所有网络接口上的客户端活动。该字段是只读的。

    Socket.Bind 方法使用 Any 字段来指示 Socket 实例必须侦听所有网络接口上的客户端活动。 Any 字段相当于点分四进制表示法中的 0.0.0.0。

    https://msdn.microsoft.com/en-us/library/system.net.ipaddress.any%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    【讨论】:

    • 但是那里需要写什么呢?当我写“100.96.106.192”(PC公共IP)时,它会抛出一个错误。
    猜你喜欢
    • 2023-01-14
    • 1970-01-01
    • 2013-01-21
    • 2011-09-26
    • 1970-01-01
    • 2012-12-20
    • 2018-11-19
    • 1970-01-01
    相关资源
    最近更新 更多