c# - Windows 10 IoT 中的 ConnectionRefused
问题描述
我已经创建了一个 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)
{
... ...
解决方案
首先,您需要检查是否添加了Private Networks (Client & Server)功能,此功能通过防火墙提供对家庭和工作网络的入站和出站访问。请参考此文档(在此处输入链接描述)。
然后,您需要检查端口是否可用,您可以在防火墙中添加端口 5037 的规则,请尝试使用以下命令。
netsh advfirewall firewall add rule name="5037 In" dir=in protocol=TCP localport=5037 action=Allow
netsh advfirewall firewall add rule name="5037 Out" dir=out protocol=TCP localport=5037 action=Allow
推荐阅读
- java - 如何更改 JFrame 的图像图标?
- javascript - Nextjs Axios 仅适用于第一次调用
- python-3.x - 无法解决 - AttributeError:“超级”对象没有属性“__getattr__”
- docker - 复制 npmrc 时 Docker compose 失败
- sqlalchemy - FastAPI 覆盖数据库连接
- sql - 按 SQL 中的 Count 计算排序
- sql - 根据条件获取每个月表中的第一行
- swift - 在Swift中将枚举分配给变量时,{}和=有什么区别?
- python - 如何两次打印相同的迭代?
- python - 熊猫将分组值包含在字典转换中