2013-03-29 63 views
0

我試圖實現一個基於此MSDN article的客戶端服務器套接字系統,我讓它工作。如果我這樣做,它可以正常工作,當服務器立即返回一個字符串。在接收流之前等待服務器

client.send(); 
client.receive(); 

的問題是,如果我的發送方法要求的東西都在服務器幾分鐘的時間來處理,比如創建文件的PDF版本中,收到呼叫後直接執行,並接受什麼(因爲服務器不是招由於它仍在處理PDF,因此不會發送任何內容)。

如何讓客戶端在執行receive方法之前等待一段時間,以便在服務器完成處理併發送文件後調用該方法?

+0

斯巴達克斯說,你似乎在尋找什麼是同步服務器的套接http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx – stevebot

回答

2

這似乎是阻塞和非阻塞接收呼叫之間的區別。阻塞接收呼叫將等待,直到它實際上有東西要接收或它會超時。無阻塞的接收呼叫將立即返回,無論數據是否存在。我不知道這是什麼,但我知道C#有兩種類型的調用。

您給出的鏈接是一個異步套接字示例,它與您嘗試執行的操作通常不同。你試圖做的是更類似於同步風格。

在套接字方面的異步通常意味着你將註冊一個函數,當數據被接收時被調用。同步意味着以阻塞或非阻塞的方式輪詢(明確要求數據)。

編輯: 你會送您的數據和設置類變量,說你已經發送的東西,並期望獲得的東西。然後等待那個變量被清除,說你收到了一些東西。

sent = 1 
client.send() 
while(sent); 

然後在您的接收回調中,當您真正得到某些東西時,您將設置該變量。

/* receive data and process */ 
sent = 0; 
+0

謝謝您的答覆。如果我必須堅持使用異步,那麼在準備好後如何獲取數據? – Moleman

相關問題