【问题标题】:How to set buffer size in client-server app using sockets?如何使用套接字在客户端-服务器应用程序中设置缓冲区大小?
【发布时间】:2010-06-17 23:34:48
【问题描述】:

首先我是网络新手,所以我可能会在这里说一些愚蠢的话。 考虑使用套接字的客户端-服务器应用程序(如果重要的话,.net 和 c#)。

  1. 客户端发送一些数据, 服务器对其进行处理并发送回 字符串。
  2. 客户端发送一些其他数据, 服务处理它,查询数据库 并送回数百 数据库中的项目
  3. 客户端发送一些其他类型的 数据和服务器通知一些 其他客户

。 我的问题是如何正确设置缓冲区大小以进行读/写操作。 我应该这样做:byte[] buff = new byte[client.ReceiveBufferSize] 吗?

I am thinking of something like this:
Client sends data to the server(and the server will follow the same pattern)
byte[] bytesToSend=new byte[2048] //2048 to be standard for any command send by the client
bytes 0..1 ->command type
bytes 1..2047 ->command parameters
byte[] bytesToReceive=new byte[8]/byte[64]/byte[8192] //switch(command type)

但是..当服务器通知客户端而不发送数据时会发生什么? 完成我想做的事情的正确方法是什么? 感谢阅读。

【问题讨论】:

    标签: c# .net network-programming


    【解决方案1】:

    缓冲区的大小无关紧要,它应该只是数据的临时存储。阅读有关从二进制流中读取的信息:http://www.yoda.arachsys.com/csharp/readbinary.html

    【讨论】:

      【解决方案2】:

      我真的不明白你想做什么,但我试着提供一些建议。您的字节数组和 Socket.ReceiveBufferSize 属性是两个不同的东西。缓冲区大小无关紧要。您应该使用一个足够大的字节数组来存储您想要发送或接收的数据。对于字节数组的大小,2048 可能是可以的,除非你想发送图像、非常大的文本等。我​​已经做了一些简单的客户端服务器编程,我发现如果接收者知道要接收多少数据会更容易进步。因此,例如,您首先将字符串的长度作为 1 或 2 个字节发送,然后使用 utf8 encoding 发送字符串。使用Encoding.GetByteCount 方法获取所选编码的字符串大小(以字节为单位)。您应该使用Bitconverter 中的方法将数字转换为二进制。我发现这些很有帮助,现在我希望我能早点发现它们。要发送其他更复杂的数据类型,您应该分解它们并将它们作为字符串或数字一次发送一个。

      【讨论】:

        【解决方案3】:

        在设计客户端/服务器通信时,最好引入客户端/服务器的一些通信协议概念(基本上是一组规则,将发送/接收的格式)。

        这是一个example 通过网络交换大小可变的消息

        【讨论】:

          【解决方案4】:

          您可以简单地将 XML 视为您的通信协议,然后您读取套接字直到读取空字节。 (这是典型的 xml 文档结束标记)。您可以通过两种方式实现此协议。

          要解析和生成 XML 文档,您可以使用 XMLDocument 类。你必须对它实施一些模式。但是,如果您想要干净的转换数据为 XML,您可以使用最简单的 DataSet

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-26
            • 1970-01-01
            • 1970-01-01
            • 2012-10-18
            • 1970-01-01
            • 2021-10-22
            • 2015-03-18
            • 1970-01-01
            相关资源
            最近更新 更多