2012-07-30 87 views
1

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

负责VB6客户端的一方制定了一个复杂的方式来传输一个我并不特别留下深刻印象的文件。它涉及发送文件的一小块,服务器在其末尾请求下一个块。这个组织声称VB6 Winsock控件不能很好地工作,如果你试图发送一个大的(“大”意味着任何不小 - 1MB是“大”)。这听起来很荒唐。

我希望客户端向套接字写入一个大的有效负载,并在服务器端做消息重组/散列。在VB6 Winsock控件中是否存在大量写入问题,或者对方是否找到了借口?

回答

1

对于大型(对于小型大值)有效载荷存在问题的VB6的说法是绝对正确的。更重要的是,由此产生的问题不同于安装和月亮阶段。向VB6发送超过一个MB的winsock控件会造成麻烦。在那里,做到这一点,相信我。这就是说,我们沿着另一条路线前进:一个函数会接受一个仲裁尺寸的有效载荷,以兆字节为单位将其整理并排入队列。 winsock控件事件(SendComplete IIRC)将用于下一兆字节的出队。

这对消费应用程序(singel调用,无关有效载荷大小)透明,怪癖在发送端运行 - 这可靠地运行,没有任何复杂的协议,因为问题在客户端完成。

+0

对于服务器来说,这似乎都是在同一个TCP会话上?即每个块不像开始会话 - >发送块 - >关闭会话?原谅我对VB6的无知是一个明显的问题。 – kmarks2 2012-07-30 14:07:41

+0

TCP“会话”?如果你的意思是连接,是的,它是一样的。客户端上的“块”不会出现在服务器上,并且每次从1字节块到整个文件都会收到任意数量的数据。 – Deanna 2012-07-30 14:10:21

+0

只是为了说明清楚:我不是在谈论重复的连接,而是通过相同的连接重复发送。服务器甚至不知道它(如果他不积极尝试) – 2012-07-30 14:28:18

4

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

+1

我同意,根本没有“大有效载荷”问题。 – Bob77 2012-07-30 15:56:25