C# VB6 Winsock能够发送非常大的有效负载

C# VB6 Winsock能够发送非常大的有效负载,c#,.net,sockets,vb6,winsock,C#,.net,Sockets,Vb6,Winsock,我正在向基本的.NET异步套接字服务器添加文件共享功能。我希望客户端发送的负载只是我的头+命令ID+二进制文件数据。除了.NET客户端之外,此服务器还需要为来自VB6客户端的请求提供服务 负责VB6客户机的一方想出了一种复杂的方法来传输一个我并不特别感兴趣的文件。它包括发送一小块文件,在最后服务器请求下一块。该方声称,如果您尝试使用大的发送(“大”表示任何不小的内容,1MB表示“大”),VB6 Winsock控件将无法正常工作。这听起来很荒谬 我希望客户端向套接字写入一个较大的负载,并在服务器端

我正在向基本的.NET异步套接字服务器添加文件共享功能。我希望客户端发送的负载只是我的头+命令ID+二进制文件数据。除了.NET客户端之外,此服务器还需要为来自VB6客户端的请求提供服务

负责VB6客户机的一方想出了一种复杂的方法来传输一个我并不特别感兴趣的文件。它包括发送一小块文件,在最后服务器请求下一块。该方声称,如果您尝试使用大的发送(“大”表示任何不小的内容,1MB表示“大”),VB6 Winsock控件将无法正常工作。这听起来很荒谬


我希望客户端向套接字写入一个较大的负载,并在服务器端执行消息重组/散列。VB6 Winsock控件中的大型写入是否确实存在问题,或者对方是否在寻找借口?

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

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

声称VB6在大(对于小值的大)有效负载方面存在问题是绝对正确的。更重要的是,由此产生的问题因安装和月亮的相位而有所不同。向VB6 winsock控件发送超过MB的数据会带来麻烦。去过那里,做到了,相信我

这就是说,我们走了另一条路:一个函数将接受仲裁大小的有效负载,以兆字节为单位将其分块并将其排队。winsock控制事件(
SendComplete
IIRC)将用于将下一个兆字节的数据移出队列


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

VB6声称存在大值问题(对于大值的小值)有效载荷是绝对正确的。更重要的是,由此产生的问题因安装和月亮的相位而有所不同。向VB6 winsock控件发送超过MB的数据会带来麻烦。去过那里,做到了,相信我

这就是说,我们走了另一条路:一个函数将接受仲裁大小的有效负载,以兆字节为单位将其分块并将其排队。winsock控制事件(
SendComplete
IIRC)将用于将下一个兆字节的数据移出队列


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

对服务器来说,这会不会看起来都在同一个TCP会话上?即,每个区块不同于开始会话->发送区块->关闭会话?请原谅我对VB6的无知,这是一个显而易见的问题。TCP“会话”?如果你指的是连接,是的,是一样的。客户机上的“块”不会出现在服务器上,它将随时接收从1字节块到整个文件的任意数量的数据。我只是想明确一点:我说的不是重复连接,而是通过同一连接重复发送。服务器甚至不知道这件事(如果他不主动尝试的话),服务器会认为这一切都是在同一个TCP会话上吗?即,每个区块不同于开始会话->发送区块->关闭会话?请原谅我对VB6的无知,这是一个显而易见的问题。TCP“会话”?如果你指的是连接,是的,是一样的。客户机上的“块”不会出现在服务器上,它将随时接收从1字节块到整个文件的任意数量的数据。我只是想明确一点:我说的不是重复连接,而是通过同一连接重复发送。服务器甚至不知道(如果他不主动尝试)我同意,根本没有“大负载”问题。我同意,根本没有“大负载”问题。