2012-07-30 48 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