我正在尝试构建一个netowrk应用程序.我成功地制作了一个发送和接收包的服务器.到目前为止,测试已在一台指向127.0.0.1的计算机上完成(没有像家一样的地方).现在我想切换到网络.如何在LAN网络上找到正在侦听我的特定端口的计算机?
该服务需要在已知端口上侦听广播消息(如果您希望表现得非常好,可以向IANA注册该程序和端口号),当它听到广播消息时,它会向发送方回复服务器的IP和服务正在侦听传入连接的端口.
以下是上面链接中的一个简单示例,它只是打印到连接的控制台和端口,但您可以使用此信息在两个端点之间建立TCP或UDP连接.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class RecvBroadcst
{
public static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to receive…");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}",
stringData, ep.ToString());
data = new byte[1024];
recv = sock.ReceiveFrom(data, ref ep);
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}",
stringData, ep.ToString());
sock.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
作为一个psudo示例,这里是我将如何做的事件序列.
对于这个例子,假设我们有一个IP为IP 192.168.1.0且子网为的网络255.255.255.0.我们有两台服务器,Server1在192.168.1.2与服务侦听端口1234,并Server2在192.168.1.3同一个端口4567的服务.两者都列在3000广播消息的端口上.客户端连接将在IP192.168.1.4
192.168.1.255:3000使用相同的端口向其广播地址和本地子网()的已知端口广播,以便在监听时发送.他发送某种有效负载,因此服务器只发回给您的客户,而不是其他碰巧使用相同端口的人.(假设它发送字符串Send me your info for XYZ app!)Send me your info for XYZ app!发送并将UDP消息发送Name:Server1 IP:192.168.1.2 Port:1234回发件人源端口和IP组合(192.168.1.4:50123)Send me your info for XYZ app!,并将UDP消息Name:Server2 IP:192.168.1.3 Port:4567消息发送回发件人源端口和IP组合(192.168.1.4:50123)| 归档时间: |
|
| 查看次数: |
2858 次 |
| 最近记录: |