【问题标题】:How to send data from .NET Server app to Windows 8 Metro Client app with Sockets?如何使用套接字将数据从 .NET Server 应用程序发送到 Windows 8 Metro Client 应用程序?
【发布时间】:2012-04-29 14:18:47
【问题描述】:

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

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

【问题讨论】:

    标签: c# sockets stream client-server windows-runtime


    【解决方案1】:

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

    【讨论】:

    • 好主意!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多