2013-02-10 54 views
1

我一直在網上搜索了幾天,我找不到任何人與VB6 Winsock有這個相同的問題。所以這裏是我的問題,我有一個數組中有兩個winsock的服務器。然後我有兩個客戶端,每個客戶端都有一個winsock控件。現在我建立了服務器首先發送數據給客戶端A.然後客戶端A接收該數據並將其自己的數據發送回服務器。然後,服務器向客戶端B發送數據,一旦客戶端B接收到數據,它將自己的數據發送回服務器。所以數據從客戶端發送到服務器,然後從服務器發送到另一個客戶端,然後返回到服務器,然後到另一個客戶端。我這樣做是因爲當我嘗試以我想要的方式進行時,我遇到了問題。所以我必須以這種方式進行設置,以確保在任何時候只有一個客戶端向服務器發送數據。這個過程完美地工作,但是我希望它以不同的方式工作,因爲就像你可以看到的那樣,客戶端越多,每個客戶端和服務器之間的數據傳輸延遲就越長。Winsock陣列與數據到達同時停止發送數據到客戶端

所以我真正想做的,我無法去工作,有客戶端發送和接收數據到服務器,只要他們想。也就是說,客戶端A將數據發送到服務器,然後服務器發回數據,而客戶端B正在做同樣的事情。當我這樣做時,即使我在服務器上有一個winsock數組,我也遇到了一個問題。當客戶端A首次連接時,它開始向服務器發送和接收數據。但是,一旦客戶端B連接到服務器,客戶端A和服務器之間的所有通信都會停止,只有客戶端B向服務器發送和接收數據。現在我已經完成了一些測試,並且客戶端A始終保持與服務器的連接。但由於某種原因,如果兩個客戶端同時向服務器發送數據,似乎只有一個數據到達事件觸發,即使每個winsock都在不同的端口上。我還沒有安裝VB6 SP6,因爲我不確定這會解決問題。

所以我真的希望有人會閱讀這些內容並向我解釋我不理解的是什麼,或者我做錯了什麼。

+0

您可以發佈您開始收聽的代碼,以及您打開連接的代碼以及您接收和發送數據的代碼嗎? – Hrqls 2013-02-11 08:04:54

回答

-3

您是否使用無阻塞套接字?我想你應該。 您應該爲每個傳入連接創建一個線程。 因此,主循環應該不會阻塞,併爲每個傳入連接創建一個線程,接收數據併發送答案。

+1

VB6 Winsock控件* only *創建異步套接字,並且在VB6中沒有創建無用的工作線程的方便方法。 – Bob77 2013-02-10 17:06:29

+0

使用原生C/C++來解決這個問題;) – Matthias 2013-02-10 17:07:31

2

如果您在Winsock控件上搜索Microsoft知識庫文章,您將發現長期存在的缺陷和錯誤修復。在嘗試使用VB6之前,絕對沒有理由不能到安裝SP6,因爲隨着時間的推移解決了大量問題。

一旦你做完了(並且只有這樣)才真正值得談論你描述的問題。至少它消除了大量已知問題,然後可能值得討論你的代碼。

+0

感謝您的回覆,我不認爲我會很快得到答案。我同意在提出任何問題之前嘗試SP6並不會有什麼壞處。但是,這正是我想知道的。這個問題是我看到一個錯誤還是Winsock應該如何表現?我將很快安裝SP6,但我不明白爲什麼人們不只是說這種行爲是一個錯誤還是它是Winsock控件的標準行爲?只有在前者安裝SP6的情況下才能解決問題。我將安裝SP6,但如果有人知道這種行爲是否正常,請告訴我。 – user2059182 2013-02-10 21:26:15

+1

他們不能說因爲沒有辦法知道。Winsock控件是初學者經常掙扎的東西,並且可以將自己束縛在節點上。一旦你安裝了SP6,你所描述的理想行爲應該很容易完成,但是你仍然必須正確編寫你的程序 - 沒有服務包可以爲你做這件事。 – Bob77 2013-02-11 13:36:17

相關問題