2010-09-16 72 views
5

我已經寫了一個TCPIP服務器,它實現了FileSystemWatcher,並用從FSW獲取的新文件中分析的數據填充隊列。每次交易後我應該關閉一個套接字(TCPIP)嗎?

單個客戶端將連接到該服務器並向隊列請求數據(其他客戶端不需要隨時連接)。如果沒有數據存在,客戶端將等待(1秒)並重試。我的問題是:客戶端是否應該爲每個事務創建一個新的套接字(在while循環中),還是讓套接字在while循環之外打開?

client.Connect() 

while(bCollectData) 
{ 
    ... communicate ... 

    Thread.Sleep(1000); 
} 

client.Shutdown(SocketShutdown.Both); 
client.Close(); 

回答

6

我建議你離開套接字打開,甚至更好地阻止它在服務器上,以便你不必做Thread.Sleep。當服務器有一些數據時,他會將消息發送給客戶端。

的代碼將使用這種方法,你會立刻得到所有的信息,避免客戶端和服務器之間發送不需要的郵件(返回該服務器沒有數據的消息)是這個樣子

while(bCollectData) 
{ 
    _socket.recv(...); //this line will wait for response from server 
    //... process message and start another wait in the next iteration. 
} 

1

我會讓套接字在循環之外打開,重新連接每一次迭代看起來像是浪費資源。

1

我不會關閉插座。每次連接你都有一些握手。

相關問題