TCP / UDP:在本地网络上将数据包从一台计算机发送到另一台计算机

时间:2013-11-16 15:38:43

标签: sockets network-programming udp ip localhost

如何从一台机器发送数据包并让其他机器接收?

我能看到的唯一方法是,如果每台机器创建一个IP:端口端点,我手动将机器A的IP:端口键入机器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拿起它?

1 个答案:

答案 0 :(得分:2)

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

195.255.255.255

然后当你在另一台机器上收到数据时(如果你绑定到IPAdress.Any就会这样),你可以看到你收到它的地址并发送回复,然后当第一台机器获得时回复它可以看到谁发​​送它的地址!

顺便说一下,广播地址:255.255.255.255,往往不会像软件一样工作,防火墙和设备往往会放弃如此广泛的广播。