Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在socket.io Node.JS中将数据从一个客户端发送到另一个客户端_Javascript_Node.js_Sockets - Fatal编程技术网

Javascript 无法在socket.io Node.JS中将数据从一个客户端发送到另一个客户端

Javascript 无法在socket.io Node.JS中将数据从一个客户端发送到另一个客户端,javascript,node.js,sockets,Javascript,Node.js,Sockets,我有两个客户端可以通过socket.io交换一些数据。我还有一个服务器。我需要做的是,我想通过套接字将数据从客户端1发送到客户端2,但我不知道如何实现。请注意,客户端1和客户端2是不同的html页面 Server.JS var express = require('express'); var app = express(); var fs = require('fs'); var path = require('path'); var server = require('http').cre

我有两个客户端可以通过socket.io交换一些数据。我还有一个服务器。我需要做的是,我想通过套接字将数据从客户端1发送到客户端2,但我不知道如何实现。请注意,客户端1和客户端2是不同的html页面

Server.JS

var express = require('express');
var app = express();
var fs = require('fs');
var path = require('path');

var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
var ip=process.env.IP||"192.168.1.5";
app.use(express.static(__dirname));
server.listen(port,ip, function () {
  console.log('Server listening at port %d ', port);
});
app.get('/index', function(req, res) {
  res.sendFile(path.join(__dirname,'/test.html'));
})
app.get('/index1', function(req, res) {
  res.sendFile(path.join(__dirname,'/test1.html'));
})

io.on('connection', function (socket) {
   socket.on('broadcast', function (message) {
            console.log(message);




            socket.broadcast.emit('message', message);
            });
            console.log("connected");

 });
 <!doctype html>
<html lang="en">
<head>
</head>
<body>
 <script src="/socket.io/socket.io.js"></script>
 <script >
var socket = io.connect();
socket.emit('broadcast',"Broadcasting Message");
socket.on('message', function (data) {

     alert(data)
});
 </script>
  </body>
 <!doctype html>
<html lang="en">
<head>
</head>
<body>
 <script src="/socket.io/socket.io.js"></script>
 <script >
var socket = io.connect();


socket.on('message', function (data) {

     alert(data)
    //socket.emit('message',"Hello world");
});
 </script>
  </body>
Client1.JS

var express = require('express');
var app = express();
var fs = require('fs');
var path = require('path');

var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
var ip=process.env.IP||"192.168.1.5";
app.use(express.static(__dirname));
server.listen(port,ip, function () {
  console.log('Server listening at port %d ', port);
});
app.get('/index', function(req, res) {
  res.sendFile(path.join(__dirname,'/test.html'));
})
app.get('/index1', function(req, res) {
  res.sendFile(path.join(__dirname,'/test1.html'));
})

io.on('connection', function (socket) {
   socket.on('broadcast', function (message) {
            console.log(message);




            socket.broadcast.emit('message', message);
            });
            console.log("connected");

 });
 <!doctype html>
<html lang="en">
<head>
</head>
<body>
 <script src="/socket.io/socket.io.js"></script>
 <script >
var socket = io.connect();
socket.emit('broadcast',"Broadcasting Message");
socket.on('message', function (data) {

     alert(data)
});
 </script>
  </body>
 <!doctype html>
<html lang="en">
<head>
</head>
<body>
 <script src="/socket.io/socket.io.js"></script>
 <script >
var socket = io.connect();


socket.on('message', function (data) {

     alert(data)
    //socket.emit('message',"Hello world");
});
 </script>
  </body>

var socket=io.connect();
socket.emit('broadcast','Broadcasting Message');
socket.on('message',函数(数据){
警报(数据)
});
Client2.JS

var express = require('express');
var app = express();
var fs = require('fs');
var path = require('path');

var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
var ip=process.env.IP||"192.168.1.5";
app.use(express.static(__dirname));
server.listen(port,ip, function () {
  console.log('Server listening at port %d ', port);
});
app.get('/index', function(req, res) {
  res.sendFile(path.join(__dirname,'/test.html'));
})
app.get('/index1', function(req, res) {
  res.sendFile(path.join(__dirname,'/test1.html'));
})

io.on('connection', function (socket) {
   socket.on('broadcast', function (message) {
            console.log(message);




            socket.broadcast.emit('message', message);
            });
            console.log("connected");

 });
 <!doctype html>
<html lang="en">
<head>
</head>
<body>
 <script src="/socket.io/socket.io.js"></script>
 <script >
var socket = io.connect();
socket.emit('broadcast',"Broadcasting Message");
socket.on('message', function (data) {

     alert(data)
});
 </script>
  </body>
 <!doctype html>
<html lang="en">
<head>
</head>
<body>
 <script src="/socket.io/socket.io.js"></script>
 <script >
var socket = io.connect();


socket.on('message', function (data) {

     alert(data)
    //socket.emit('message',"Hello world");
});
 </script>
  </body>

var socket=io.connect();
socket.on('message',函数(数据){
警报(数据)
//emit('message','helloworld');
});

在客户端实例化WS时,请确保将URL传递给服务器。。。例如
var socket=io.connect('http://localhost');

在服务器端,与每个客户机的每个WS连接都是唯一的实例。也就是说,为了达到这个目的,您必须在发出事件时仔细考虑您的目标是哪个WS-connection

首先要解决的是如何将WS-connection实例与特定客户机关联。解决方法是使用map/dictionary/plain ol'javascript对象,将某种唯一的客户端标识符作为键,将WS-connection的实例作为值。伪代码:

let connections = { 'client1': WSinstance, 'client2': WSinstance };
每次创建新的WS-instance时,您都会添加到该对象中。假设您有一种唯一标识客户机的方法,并且该方法存储在变量
clientId
中,则可以执行以下操作:

io.on('connection', function (socket) {
  connections[clientId] = socket;
}

现在,如果您只想向client1发送消息,您可以通过从对象
connections.client1
获取与之关联的WS实例来使用它,或者如果您想以client2
连接为目标。client2

在客户端实例化WS时确保将URL传递给服务器。。。例如
var socket=io.connect('http://localhost');

在服务器端,与每个客户机的每个WS连接都是唯一的实例。也就是说,为了达到这个目的,您必须在发出事件时仔细考虑您的目标是哪个WS-connection

首先要解决的是如何将WS-connection实例与特定客户机关联。解决方法是使用map/dictionary/plain ol'javascript对象,将某种唯一的客户端标识符作为键,将WS-connection的实例作为值。伪代码:

let connections = { 'client1': WSinstance, 'client2': WSinstance };
每次创建新的WS-instance时,您都会添加到该对象中。假设您有一种唯一标识客户机的方法,并且该方法存储在变量
clientId
中,则可以执行以下操作:

io.on('connection', function (socket) {
  connections[clientId] = socket;
}

现在,如果您只想向client1发送消息,您可以通过从对象
connections.client1
获取与之关联的WS实例来使用它,或者如果您想以client2
connections.client2
为目标,那么这里是我在本地所做的,您可以根据需要更改它

server.js

}))

client1.js

client2.js

index.html


客户1
客户2

在运行node server.js并重新加载页面后,客户端2将附加
广播消息
html

好的,这是我在本地所做的,您可以根据需要进行更改

server.js

}))

client1.js

client2.js

index.html


客户1
客户2

在运行后的终端上,
node server.js
并重新加载页面,您将看到client2将添加
广播消息
html

Hi@rdgd感谢您的回复看到您的答案我想您想说的是,我想从我的服务器向每个客户端发送消息,但我需要做的是从客户端1向客户端2发送消息!我将不得不使用服务器作为中间人在这里我完全理解你的答案!他正在使用socket.io,这有助于您通过所有socket客户端广播和发送消息<代码>socket.broadcast.emit()
老实说,我看不出代码有任何错误,它应该可以工作。但它看起来还缺少一些东西,完整的代码会帮助更多。没问题。我正试图回答您的问题,从client1发送到client2,是的,您需要在这个等式中使用您的服务器作为中间人,除非您使用WebRTC或类似的工具。不知道为什么我被否决了。。。我的回答假设他想从y客户机以x客户机为目标,而不是想向所有客户机广播所有消息。这在概念上是可行的,因为我已经实现了很多次类似的设计。@guyfawkes谢谢你的回复,实际上这是我的全部代码!!我一定是遗漏了一些东西,剩下的代码包括在服务器和客户端脚本上添加socket.io脚本!我试图在一个非常基本的层面上做到这一点@您是从服务器使用相同的client.js,还是从cdn或其他地方使用相同的client.js。我将尝试在我的本地网站上创建,看看是否还有其他内容hi@rdgd感谢您的回复通过查看您的答案我想您想说的是,我想从我的服务器向每个客户端发送消息,但我需要做的是从客户端1向客户端2发送消息!我将不得不使用服务器作为中间人在这里我完全理解你的答案!他正在使用socket.io,这有助于您通过所有socket客户端广播和发送消息<代码>socket.broadcast.emit()
老实说,我看不出代码有任何错误,它应该可以工作。但它看起来还缺少一些东西,完整的代码会帮助更多。没问题。我正试图回答您的问题,从客户1发送到客户2,是的,您需要