【问题标题】:TCP/UDP: Send packet from one machine to another on local networkTCP/UDP:将数据包从一台机器发送到本地网络上的另一台机器
【发布时间】:2013-11-29 23:30:41
【问题描述】:

如何从一台机器发送数据包并让另一台机器取走它?

我能看到的唯一方法是,如果每台机器都创建一个 IP:port 端点,然后我手动将机器 A 的 IP:port 输入机器 B,反之亦然。

目前我让它在我的 MacBook 上的两个应用程序之间工作:机器 A(一个处理脚本)向 localhost:5000 发送一个数据包

void UDPSendMessage( String message )
{
    String ip       = "localhost";  // the remote IP address
    int port        = 5000;         // the destination port

    udp.send( message, ip, port );

    print( "sending: " + message + "\n" );
}

我的 C#/.NET 套接字接收器将其接收:

    IPAddress ip = IPAddress.Any;

    IPEndPoint ep = new IPEndPoint( ip, 5000 );

    Socket S = new Socket(
        ip.AddressFamily, 
        SocketType.Dgram, 
        ProtocolType.Udp
        );

    S.Bind( ep );

    S.BeginReceive(...)

但是通过家庭网络我将无法使用 localhost,而且我不喜欢硬编码端口号的想法:如果其中一台机器已经在使用该端口怎么办?

那么在没有任何先验知识的情况下,如何让机器 A 发出信号并让机器 B 接收信号?

【问题讨论】:

  • 选择一个硬编码的端口号正是您需要做的。这就是已建立的应用程序和协议使用已知端口号进行通信的方式。以下是常见的列表:List of TCP and UDP port numbers.

标签: sockets network-programming udp ip localhost


【解决方案1】:

您可以通过将数据寻址到broadcast address 来发现在特定端口(因此您需要一个)上侦听同一子网的其他对等方,例如:

195.255.255.255

然后,当您在另一台机器上收到数据时(如果您绑定到 IPAdress.Any,您将收到),您可以查看从哪个地址收到数据并发送回复,然后当第一台机器收到回复它可以看到发件人的地址!

顺便说一句,广播地址:255.255.255.255,往往永远无法正常工作,因为软件、防火墙和设备往往会丢弃如此广泛的广播。

【讨论】:

    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 2019-05-19
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多