Sockets TCP/UDP:在本地网络上从一台机器向另一台机器发送数据包
如何从一台机器发送数据包并让另一台机器接收 我能看到的唯一方法是,如果每台机器创建一个IP:port端点,我手动将机器A的IP:port键入机器B,反之亦然 目前我在MacBook上的两个应用程序之间工作:机器A(一个处理脚本)向localhost:5000发送一个数据包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
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