1

我正在向基本的.NET 异步套接字服务器添加文件共享功能。我希望客户端发送的有效负载只是我的 headers+commandID+binaryFileData。除了 .NET 客户端之外,该服务器还需要为来自 VB6 客户端的请求提供服务。

负责 VB6 客户端的一方制定了一种复杂的方式来传输我并不特别印象深刻的文件。它涉及发送文件的一小块,最后服务器请求下一个块。该方声称,如果您尝试使用大发送(“大”意味着任何不小的东西——1MB 是“大”),VB6 Winsock 控件将无法正常工作。这对我来说听起来很荒谬。

我希望客户端向套接字写入一个大的有效负载,并在服务器端进行消息重组/散列。VB6 Winsock控件大写真的有问题,还是对方找借口?

4

2 回答 2

4

不,Winsock 和套接字控件没有文件或大小的概念,只有字节流。我希望他们达到缓冲区大小,在这种情况下,他们只需要分块发送,直到全部发送。服务器无需请求下一个块,这只会减慢速度。

于 2012-07-30T14:01:17.210 回答
1

VB6 在大(对于大的小值)有效载荷方面存在问题的说法是绝对正确的。更重要的是,由此产生的问题因安装和月相而异。将超过一个 MB 发送到 VB6 winsock 控件是自找麻烦。去过那里,做到了,相信我。

也就是说,我们采用了另一条路线:一个函数将接受任意大小的有效负载,将其分块为兆字节并将其排入队列。winsock 控制事件 ( SendCompleteIIRC) 将用于出列下一个兆字节。

这对消费应用程序是透明的(一个单独的调用,与有效负载大小无关),在发送端解决了问题 - 这在没有任何复杂协议的情况下可靠地工作,因为问题完全在客户端内部。

于 2012-07-30T14:02:24.103 回答