我正在向基本的.NET异步套接字服务器添加文件共享功能。我希望客户端发送的有效负载只是我的头+ commandID + binaryFileData。除了.NET客户端之外,该服务器还需要为来自VB6客户端的请求提供服务。
负责VB6客户端的一方制定了一种令人费解的方式来传输一个我并不特别深刻印象的文件。它涉及发送文件的一小块,最后服务器要求下一个块。这个派对声称,如果你尝试用大的发送(“大”意味着任何不小的东西--1MB是“大”),VB6 Winsock控件不能很好地工作。这听起来很荒谬。
我希望客户端将单个大型有效负载写入套接字,并在服务器端进行消息重组/散列。在VB6 Winsock控件中是否存在大写入问题,或者另一方是否找借口?
答案 0 :(得分:4)
不,Winsock和套接字控件没有文件或大小的概念,只是一个字节流。我希望他们达到缓冲区大小,在这种情况下,他们只需要发送块,直到它们全部被发送。服务器无需请求下一个只会减慢速度的块。
答案 1 :(得分:1)
VB6的大型(大型小型)有效载荷存在问题的说法是绝对正确的。更重要的是,由此产生的问题因安装和安装以及月相而异。向VB6 winsock控件发送超过MB的数据就是在寻找麻烦。去过那里,做到这一点,只相信我。
也就是说,我们走了另一条路线:一个函数接受一个任意大小的有效载荷,以兆字节为单位对其进行排队并将其排队。 winsock控制事件(SendComplete
IIRC)将用于使下一个兆字节出列。
这对于消费应用程序来说是透明的(一个单独的调用,无关紧要的有效负载大小),在发送端处理怪癖 - 这可以在没有任何复杂协议的情况下可靠地工作,因为问题完全在客户端内部。