2013-04-06 196 views
1

這是我第一次使用節點js。我試圖讓客戶端連接到服務器並保持連接而不關閉。客戶端在連接到節點js後立即斷開TCP服務器

這是全部託管在一個虛擬機託管的Ubuntu服務器版。

我已經檢查了服務器使用netstat的 -ant

WebSockets的實際偵聽的端口5000,也可在我的瀏覽器。

我得到以下輸出錯誤

Echo server dot come 
192.168.1.107 
node.js:134 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
Error: EPIPE, Broken pipe 
    at Socket._writeImpl (net.js:159:14) 
    at Socket._writeOut (net.js:450:25) 
    at Socket.write (net.js:377:17) 
    at Socket.ondata (stream.js:36:26) 
    at Socket.emit (events.js:81:20) 
    at Socket._onReadable (net.js:678:14) 
    at IOWatcher.onReadable [as callback] (net.js:177:10) 

,如果我對連接的事件處理程序調用服務器上socket.end()我得到一個斷開客戶機。我的問題是如何建立一個穩定的連接使用此代碼,我必須改變什麼,或者我在這裏做錯了?拉我的頭髮 - 提前致謝!

HTML代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Test RS Server (built over nodejs)</title> 
<link rel="stylesheet" href="style.css"></link> 
<script src="jquery.min.js" ></script> 
<script src="client.js" ></script> 
</head> 
<body> 
<label>Message</label> 
<input type="text" id="message_box"></input> 
<input type="button" id="submit_btn" value="Send"></input> 
<div style="clear:both;"/> 
<label>Output</label> 
<textarea rows="10" cols="100" id="output_box"></textarea> 

</body> 
</html> 

CLIENT JS

var message_box; 
var output_box; 
var submit_btn; 
var url = "wss://192.168.1.107:5000"; 
var socket; 

function createListeners() { 
    if ("WebSocket" in window) { 
     output_box.html("Supports sockets."); 
     socket= new WebSocket(url); 
     socket.onopen= function() { 
      socket.send("con opened"); 
      output_box.html("Connection opened."); 
     }; 
     socket.onmessage= function(response) { 
      // alert('got reply '+s); 
      console.log(response); 
      output_box.html(response); 
     }; 
     socket.onclose = function() { 
      // websocket is closed. 
      output_box.html("Connection is closed..."); 
     }; 
     submit_btn.click(function(e) { 
      socket.send(message_box.val()); 
     }); 
    } else { 
     output_box.html("doesnt support sockets"); 
    }; 
}; 

$(document).ready(function() { 
    message_box = $("#message_box"); 
    output_box = $("#output_box"); 
    submit_btn = $("#submit_btn"); 
    createListeners(); 
}); 

服務器JS代碼

var net = require('net'); 
var server = net.createServer(function (socket) { 
    socket.write('server says this\r\n'); 
    socket.pipe(socket); 
}); 
server.on('connection', function(socket) { 
    socket.write("Echo server dot come\r\n"+socket.address().address); 
    console.log("Echo server dot come\r\n"+socket.address().address); 
    // socket.end(); 
    socket.pipe(socket); 
}); 
server.listen(5000); 

回答

2

您要使用WebScoket客戶端,簡單的TCP服務器。這是一個不同的協議。您需要設置WebSocket服務器才能使其工作。你可以使用websocket模塊來做到這一點。查看服務器示例代碼here

+0

非常感謝您的回答。我最初想學習nodejs,所以我需要構建一個可以連接到nodejs TCP服務器的客戶端。我無法指出自己正確的方向。 – yshouman 2013-04-08 00:24:16

+0

我做了一些Google搜索,發現這個[示例](http://www.hacksparrow.com/tcp-socket-programming-in-node-js.html)。我不確定哪個節點js腳本包含在客戶端應該工作的頁面中。我在Linux機器上使用軟件包管理器安裝了Nodejs。我不確定客戶端庫是否隨附它。任何線索絕對值得讚賞。 – yshouman 2013-04-08 00:33:10

相關問題