【问题标题】:Socket c# send and receiveSocket c# 发送和接收
【发布时间】:2012-07-22 11:50:11
【问题描述】:

在没有多客户端的服务器/客户端程序中
当服务器发送两条消息时:

byte[] data = Encoding.Default.GetBytes("hello world1");
socket.Send(data1, 0, data.Length, 0);

byte[] data = Encoding.Default.GetBytes("hello world2");
socket.Send(data1, 0, data.Length, 0);

客户端在一条消息中收到两条消息,例如:

你好世界1你好世界2

但我希望客户端收到 2 发送 2 收到

请帮我解决它??? :(

【问题讨论】:

    标签: c# sockets


    【解决方案1】:

    使用像“\n”这样的行分隔符来分割传入的消息。使用 TCP,您必须为数据包被拆分或连接的情况做好准备。

    如果您使用 UDP,您可以发送单独的数据包。

    【讨论】:

      【解决方案2】:

      这些是您的一些选择

      1. 您可以使用长度前缀消息。例如,您总是在前 4 个字节中发送消息的长度。服务器将读取前四个字节并知道长度并知道有多少剩余字节是该消息的一部分。它会知道接下来的四个字节等等。
      2. 您可以使用消息标记器。例如,如果您知道您的消息永远不会有特定的位模式,您可以将其作为消息标记器发送。例如,服务器可能总是扫描位模式 0,1,0,1,0,1 并知道消息已结束
      3. 您可以使用更高级别的框架 WCF,让基础架构为您处理它

      【讨论】: