如何将数据从 .NET Server 应用发送到带套接字的 Windows 8 Metro 客户端应用

本文关键字:应用 套接字 Windows 客户端 Metro 数据 NET Server | 更新日期: 2023-09-27 18:32:43

我正在尝试使用套接字从我的桌面应用程序发送简单的字符串消息 以下是将数据发送到客户端的服务器端代码

    swSenderSender = new StreamWriter(tcpClients[i].GetStream());
    swSenderSender.WriteLine(From + " says: " + Message);
    swSenderSender.Flush();
    swSenderSender = null;

我有 Metro 应用程序 - 使用 DataReader 的客户端代码

    var dr = new DataReader(socket.InputStream);
    var stringHeader = await dr.LoadAsync(4);
    int strLength = dr.ReadInt32();
    uint numStrBytes = await dr.LoadAsync((uint)strLength);
    string msg = dr.ReadString(numStrBytes);

这就是问题所在。DataReader 需要知道发送的字符串有多长。另一方面,StreamWriter 不能打磨一个简单的字符串/或带有新通道的字符串。如何连接这两个代码?或者也许有其他方法可以做到这一点。请帮忙。我不知道如何格式化数据以便能够在客户端和服务器之间发送数据。

如何将数据从 .NET Server 应用发送到带套接字的 Windows 8 Metro 客户端应用

在协议中解决此问题的正常方法是将消息的长度放在第一位,在一个固定长度的字段中,例如长度 N。例如,如果您永远不会在消息中收到超过 999 个字符,则 N=3。因此,您的接收代码将下放到

receive N characters (or bytes, whatever).
decode N to get number of characters following, say M.
receive M characters.
repeat ad nauseam.