2014-06-25 46 views
0

我想了解如何這個特定的方案將工作,因爲我從來沒有做過套接字編程。我會嘗試用明智的代碼來解釋它。C#:套接字發送到另一個應用程序,並聽取其響應,並繼續

有一個應用程序位於將執行過程/計算的「應用程序」服務器上。數據規格將由多個客戶端提供給這個「應用」服務器。一旦處理完成,它會將數據返回給客戶端。

這種情況是: 客戶端將有數據,它將需要發送到服務器執行進程/計算。我想它會使用TCPClient(不知道?)將數據發送到「應用程序」服務器。然後「應用程序」服務器將結果發送回客戶端,然後客戶端代碼將繼續處理。

我現在關心的是它必須等到「應用程序」服務器發送響應。 因此,這裏是我的問題:

  1. 後,我做的發送代碼,我現在可以去的代碼,其中它將從「應用」服務器的響應聽如do-while循環中等待在繼續之前做出迴應?

  2. 我不確定我是否在這裏使用正確的術語,但是如果有多個客戶端點擊「應用程序」服務器,然後客戶端必須監聽響應 - 我能否假設我需要一個過程來識別「應用程序」服務器的響應是針對特定客戶端的?

我還沒有編寫代碼,只是想着如何處理這種情況。

在此先感謝您的任何建議。

回答

1

首先,我建議閱讀一下socket編程如何工作。因爲事件驅動的方法可能會更好(是的,你可以使用阻塞函數,但不推薦使用它們)。

我不推薦使用TCPClient和TCPListener(並且如果您可以儘可能地停留在NetworkStreams中),使用純Socket並不是非常困難,並且總是會給出更好的結果。

所以,現在,逐點:

  1. 而不是「等待」的迴應只是繼續你的工作,並在收到東西后繼續執行的過程,這也將是很多更加敏感,因爲你不會鎖定你的應用程序(你可以通過阻塞調用來實現,但是它會涉及每個套接字創建一個新的線程)。

  2. 在您的服務器代碼中,您需要一種方法來識別每個套接字與客戶端,通常情況下,如果您使用SocketAsyncEventArgs中的異步方法(ReadAsync,WriteAsync),您有一個名爲「UserToken」的屬性,可以確定哪一個來了回調。

希望它可以幫助

+0

的NetworkStream實際上是非常有用的...但通常是一個很好的答案,所以+1 –

+0

它很有用但很慢,嘗試發送海量數據,然後與手動使用異步函數進行比較,我學會了這一難題... – Gusman

相關問題