0

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

    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 不能与简单的字符串/或带有新通道的字符串不同。如何连接这两个代码?或者也许还有另一种方法可以做到这一点。请帮忙。我不知道如何格式化数据以便能够在客户端和服务器之间发送它。

4

1 回答 1

2

在协议中解决这个问题的一般方法是把消息的长度放在第一位,在一个固定长度的字段中,比如长度 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.
于 2012-04-29T14:38:31.480 回答