的Node.js:发送消息至服务器
问题描述:
我有我的服务器上运行以下的node.js:的Node.js:发送消息至服务器
var net=require('net');
var util=require('util');
var server=net.createServer(function(conn){
conn.on('connect',function(){
util.puts('connect');
});
conn.on('data',function(data){
util.puts(data);
});
});
server.listen(5000,'172.16.1.197');
这一切正常,我可以telnet到172.16.1.197:5000和它的行为预期。
现在,我有一个客户端在IP地址为172.16.1.218的另一个盒子上运行,我只是想发送一条消息到服务器。
function sendAMessage(payLoad){
//what to put in here?
}
payLoad应打印在服务器端。
我知道这看起来很简单,但我真的无法绕过它 - 我对node.js很陌生。
很多感谢,
添加一些代码:
这里的客户端(172.16.1.218):
var http = require('http');
var util=require('util');
var net=require('net');
var localHash={};
var chunkLength=100;
http.createServer(function(request, response) {
var proxy = http.createClient(80, request.headers['host'])
var proxy_request = proxy.request(request.method, request.url, request.headers);
proxy_request.addListener('response', function (proxy_response) {
proxy_response.addListener('data', function(x) {
var responseData=x.toString("binary");
var bytes=getBytes(responseData);
util.puts(bytes.length);
for(var i=0;i<bytes.length;i++){
var hash=DJBHash(bytes[i]);
//util.puts(hash);
if(hash in localHash){
//in hash, send alias
//response.write("<EOH>"+hash+"</EOH>",'binary');
response.write(bytes[i],'binary');
}else{
//not in hash, send full chunk
updateRemoteHash(hash,bytes[i]);
response.write(bytes[i],'binary');
localHash[hash]=bytes[i];
}
}
//response.write(bytes,"binary");
});
proxy_response.addListener('end', function() {
response.end();
});
response.writeHead(proxy_response.statusCode, proxy_response.headers);
});
request.addListener('data', function(chunk) {
util.puts(chunk);
proxy_request.write(chunk, 'binary');
});
request.addListener('end', function() {
proxy_request.end();
});
}).listen(8080,'172.16.1.218');
function getBytes(responseData){
var f=chunkLength;
var toTransmit="";
var p=0;
var bytes=Array();
var N=responseData.length;
if(N>f){
p=Math.floor(N/f);
var hash="";
var chunk="";
for(var i=0;i<p;i++){
chunk=responseData.substr(f*i,f);
toTransmit=toTransmit+chunk;
bytes[i]=chunk;
/*hash=DJBHash(chunk);
if(localHash[hash]==undefined){
localHash[hash]=chunk;
//updateRemoteHash(hash,chunk);
toTransmit=toTransmit+chunk;
}else{
sys.puts("***hit"+chunk);
toTransmit=toTransmit+chunk;//"***EOH"+hash;
}*/
}
//remainder:
chunk=responseData.substr(f*p);
toTransmit=toTransmit+chunk;
bytes[p]=chunk;
/*hash=DJBHash(chunk);
if(localHash[hash]==undefined){
localHash[hash]=chunk;
//updateRemoteHash(hash,chunk);
toTransmit=toTransmit+chunk;
}else{
toTransmit=toTransmit+chunk;//"***EOH"+hash;
}*/
}else{
toTransmit=responseData;
bytes[0]=responseData;
}
return bytes;
}
function DJBHash(str) {
var hash = 5381;
for(var i = 0; i < str.length; i++) {
hash = (((hash << 5) + hash) + str.charCodeAt(i)) & 0xffffffff;
}
if(hash<-1){
hash=hash*-1;
}
return hash;
}
function updateRemoteHash(hash,chunk){
var c=net.createConnection(5000,'172.16.1.197');
c.on('connect',function(){
c.write(hash);
c.end();
});
}
和服务器端(172.16.1.197) :
var net=require('net');
var util=require('util');
var server=net.createServer(function(conn){
conn.on('connect',function(){
util.puts('connect');
});
conn.on('data',function(data){
util.puts(data);
});
});
server.listen(5000,'172.16.1.197');
答
您已使用net.createServer
设置TCP服务器。您现在需要使用net.createConnection
连接到TCP服务器。
function sendAMessage(msg) {
var c = net.createConnection(5000, '172.16.1.218');
c.on("connect", function() {
// connected to TCP server.
c.write(msg);
});
}
嗨,非常感谢您的答复。我只是在午饭之前整理出一些其他的bug。我会尽快与您联系,通知您是否有效。虽然看起来不错。 – Eamorr
嗨,我有一个问题:'节点:../src/stream_wrap.cc:220:静态V8 ::处理<:value>节点:: StreamWrap ::写(const v8 :: Arguments&):断言'Buffer :: HasInstance( args [0])'失败。 Aborted'我尝试写入端口5000,IP地址172.16.1.197 – Eamorr
@Eamorr在连接事件发生之前您是否向端口写入数据? – Raynos