Sockets TCP/UDP:在本地网络上从一台机器向另一台机器发送数据包

Sockets TCP/UDP:在本地网络上从一台机器向另一台机器发送数据包,sockets,network-programming,udp,ip,localhost,Sockets,Network Programming,Udp,Ip,Localhost,如何从一台机器发送数据包并让另一台机器接收 我能看到的唯一方法是,如果每台机器创建一个IP:port端点,我手动将机器A的IP:port键入机器B,反之亦然 目前我在MacBook上的两个应用程序之间工作:机器A(一个处理脚本)向localhost:5000发送一个数据包 void UDPSendMessage( String message ) { String ip = "localhost"; // the remote IP address int port

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

我能看到的唯一方法是,如果每台机器创建一个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在没有任何先验知识的情况下拾取信号呢?

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

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


顺便说一句,广播地址:255.255.255.255,由于软件、防火墙和设备倾向于放弃如此广泛的广播,因此永远不会工作。

选择硬编码端口号正是您需要做的。这就是已建立的应用程序和协议与已知端口号进行通信的方式。下面是一个常见的列表:。
195.255.255.255