2011-12-25 30 views
4

我正在用TCP套接字切割我的牙齒,並且對消息如何到達我的應用程序感到困惑。好像他們分手了。任何人都知道我怎樣才能最好地把他們一起回來?如何在node.js中分離TCP套接字消息

data: '0' 
data: '5293800791D04\r' 
data: '\n' 
data: '053138007928F1\r\n' 
data: '05313800012869\r\n' 
data: '052E3800790E0E\r\n' 
data: '052E3800010E86\r\n' 
data: '05223' 
data: '8007933F5\r\n' 
data: '05213800791019\r\n' 
data: '05213800795C795B79265A\r\n' 
data: '05213800011091\r\n' 

我需要斷行,打破東西了,所以我不:所有消息由一個換行符(\ r \ n)的

var stream = net.createConnection(port,host); 
stream.setEncoding("utf8"); 

stream.on('data', function(chunk){ 
    console.log('data: ' + sys.inspect(chunk)); 
}); 

樣的東西轉儲到控制檯看起來像分離有不完整的信息。有沒有辦法告訴節點爲我做這件事?如果沒有,有沒有人有這樣做的樣本?

回答

4

由於TCP是一個流協議(而不是塊協議),它不維護之間你可能會考慮什麼是個人信息的任何邊界。如果您需要重新彙編傳入流中的高級消息,則這是接收方的責任。

您可以通過添加一個將輸入數據讀入緩衝區的圖層,然後每當在輸入流中看到\r\n時一次釋放一行。另外,如果您可以將流數據更改爲一個分隔符(例如\n),則緩衝代碼可能會變得更簡單一些。

+2

你可能想說「消息」(應用程序 - 而不是「數據包」(它在TCP中有特定的含義),以避免混淆 - 將數據包*重組爲流是TCP所做的。將該流轉換爲*消息*是應用程序所做的事情。 – josh3736

+0

謝謝,解決了。 –