【发布时间】:2019-08-27 13:39:35
【问题描述】:
我已经创建了一个 DHCP 服务器并添加了一个 TCP 服务器。当我在 DHCP 服务器的 IPv4 地址发送消息时,客户端会回复:ConnectionRefused。
我已将属性设置为 true
DataSocket = new DatagramSocket();
DataSocket.Control.MulticastOnly = true;
此代码运行以启动应用程序 UWP:
private void Start()
{
if (this.StatusButton.Content.ToString().Equals(AVVIA))
{
this.ViewModel.Action = "AVVIO DEL SERVER DHCP IN CORSO...";
RunServer();
this.StatusButton.Content = UPDATE;
Task.Run(async () =>
{
await Task.Delay(DELAY);
Server = new Server();
Server.StartServer();
});
}
... ... ...
private void RunServer()
{
IPAddress iPAddress;
DhcpServer = new ScaemDhcp.DhcpServer();
iPAddress = new IPAddress(new byte[] { 192, 168, 1, 101 });
DhcpServer.Run(iPAddress, DNS, SUB_MASK, SERVER_IDENTIFIER, ROUTER_IP);
}
public void Run(IPAddress iPAddress, string dns, string subnetMask, string serverIdentifier, string routerIP)
{
var server = new Dhcp(iPAddress);
server.ServerName = dns;
server.BroadcastAddress = IPAddress.Broadcast.ToString();
server.OnDataReceived += (sender, dhcpRequest) =>
{
try
{
var type = dhcpRequest.GetMsgType();
var ip = iPAddress;
var replyOptions = new DhcpReplyOptions();
replyOptions.SubnetMask = IPAddress.Parse(subnetMask);
replyOptions.DomainName = server.ServerName;
replyOptions.ServerIdentifier = IPAddress.Parse(serverIdentifier);
replyOptions.RouterIP = IPAddress.Parse(routerIP);
replyOptions.DomainNameServers = new IPAddress[]
{IPAddress.Parse("8.8.8.8"), IPAddress.Parse("8.8.4.4")};
if (type == DhcpMsgType.DHCPDISCOVER)
{
dhcpRequest.SendDHCPReply(DhcpMsgType.DHCPOFFER, ip, replyOptions);
}
if (type == DhcpMsgType.DHCPREQUEST)
{
dhcpRequest.SendDHCPReply(DhcpMsgType.DHCPACK, ip, replyOptions);
}
}
catch (Exception e)
{ }
};
server.Start();
}
... ...
public async void StartServer()
{
try
{
var streamSocketListener = new StreamSocketListener();
streamSocketListener.ConnectionReceived += this.StreamSocketListener_ConnectionReceived;
await streamSocketListener.BindServiceNameAsync(PORT.ToString());
}
catch (Exception ex)
{
... ...
【问题讨论】:
-
TCP 不支持多播。多播只是 UDP。
-
我已添加此支持(多播)以测试所有可能的解决方案(我处于绝望模式)...
-
组播是广播,无法连接。组播仅适用于 IP 224.X.X.X 到 239.X.X.X。您可以为多播和非多播设置 UDP 广播。 DCHP 使用端口 67 和 68,这可能已被病毒检查程序或防火墙阻止。参见维基:en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
-
我已经删除了多播,结果我发现 DHCP 服务器工作正常,但我在 Win 10 IoT 中的 TCP 服务器根本无法工作。我已通过以太网将 Raspberry (Win 10 IoT) 与我的 PC 连接起来。结果是:PC 需要并获得一个 IPv4、GW 等...如 DHCP 服务器中设置的那样。然后我(在 PC 中)运行一个客户端 TCP,用于向我的 Raspberry(Win 10 IoT)发送消息,这里我正在执行一个 TCP 服务器。客户端的结果是:ConnectionRefused。
-
DCHP 是 UDP 广播。 IP:源=0.0.0.0(服务器);目的地=255.255.255.255(广播IP)UDP:源端口=68;目的端口=67
标签: c# tcp uwp windows-10-iot-core dhcp