2013-04-06 195 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

相关问题