【问题标题】:Windows Store Datagram not sending telnet dataWindows 应用商店数据报不发送 telnet 数据
【发布时间】:2013-09-11 21:21:03
【问题描述】:

我目前正在尝试将我的应用程序从 .NET 移植到 Windows 应用商店,但我无法让我的 UDP telnet 通信正常工作。

我在 App Manifest 中启用了 Internet(客户端)、Internet(客户端和服务器)和专用网络,并且我测试了其他 UDP 通信并且它们已经成功,但是当我尝试发送 telnet 命令时,它确实不工作。

我正在处理的代码是以下 C# 的翻译:

var client = new TcpClient("192.168.1.152", 23);
var stream = client.GetStream();
try
{
    var encoder = new ASCIIEncoding();
    var outBuffer = new byte[_bufferSize];
    var buffer = encoder.GetBytes(command);

    await stream.WriteAsync(buffer, 0, buffer.Length);
    return true;
}
catch (IOException)
{
    return false;
}

我的 Windows 应用商店兼容代码如下所示:

var socket = new DatagramSocket();
var hostName = new HostName("192.168.1.152");
var stream = await _socket.GetOutputStreamAsync(_hostName, "23");

var writer = new DataWriter(stream);
writer.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;

try
{
    var buffer = Encoding.UTF8.GetBytes(command);
    writer.WriteBytes(buffer);
    await writer.StoreAsync();
    return true;
}
catch (IOException)
{
    return false;
}

代码运行,方法返回true(无异常),但是当我运行代码并用WireShark监控时,发现Store App代码没有产生新的telnet流量,接收设备没有处理发送的任何命令。 .NET 代码在同一台机器上运行,完美无缺。

此外,如果我在触发事件时尝试订阅 socket.MessageReceived += MessageReceived,我在尝试调用 args.GetDataReader() 时会收到以下异常:

现有连接被远程主机强行关闭。 (HRESULT 异常:0x80072746)

什么可能导致此数据无法从 Windows 应用商店应用程序发送?发送 telnet 数据有什么特殊限制吗?还是我的应用程序以某种方式阻止了端口 23?

【问题讨论】:

  • 当你翻译的代码和 Telnet 使用 TCP 时,为什么你使用 UDP?这就是为什么 Wireshark 不将其用作 Telnet 的原因。至于 MessageReceived 的异常,我们必须查看您的代码 - 您是否正确绑定了侦听套接字?
  • 大声笑,是的......第 4 层以下的大多数东西我几乎认为是魔法。已经很晚了,我没有意识到我从 TCP 切换到了 UDP。如果您想发表评论作为答案,我会为您接受。

标签: c# udp windows-store-apps telnet datagram


【解决方案1】:

使用 TCP

当你翻译的代码和 Telnet 使用 TCP 时,为什么你使用 UDP?这就是为什么 Wireshark 不将其用作 Telnet 的原因。至于 MessageReceived 上的异常,我们必须查看您的代码 - 您是否正确绑定了侦听套接字?

;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多