c# - Windows 10 IoT 中的 ConnectionRefused

标签 c# tcp uwp windows-10-iot-core dhcp

我已经创建了一个 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) ,此功能提供通过防火墙对家庭和工作网络的入站和出站访问。请引用此文档( enter link description here )。

然后,您需要检查端口是否可用,您可以在防火墙中添加端口 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

关于c# - Windows 10 IoT 中的 ConnectionRefused,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538974/

相关文章:

c# - 允许任何 ASCII 字符的正则表达式模式。但不带空格

c# - 寻找一种优雅的方式来绕过 "Cannot await in the body of a finally clause"

c# - 从 Windows 应用程序调用 WCF - 主机

c# - Naudio 和 TCP 流的断断续续的音频。缓冲区满异常

c# - 如何正确关闭在线程中打开的 TcpClient

c# - 将 SAXON 9.5 (nuget) 与 Schematron 结合使用

iphone - 通过 wifi 将图像数据从 iPhone/iPad 发送到 Windows PC

c# - UWP Store App 中的隐私政策 ?提交应用商店认证失败

c# - 为什么我不能使用 {x :Bind {RelativeSource Self}} in a data template?

c# - UWP - 缩放图像(捏缩放和双击),翻转 View