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);
非常感謝您的回答。我最初想學習nodejs,所以我需要構建一個可以連接到nodejs TCP服務器的客戶端。我無法指出自己正確的方向。 – yshouman 2013-04-08 00:24:16
我做了一些Google搜索,發現這個[示例](http://www.hacksparrow.com/tcp-socket-programming-in-node-js.html)。我不確定哪個節點js腳本包含在客戶端應該工作的頁面中。我在Linux機器上使用軟件包管理器安裝了Nodejs。我不確定客戶端庫是否隨附它。任何線索絕對值得讚賞。 – yshouman 2013-04-08 00:33:10