Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Sockets 如何使用NodeJS将侦听一个端口的WebSocket连接到侦听另一个端口的netsocket?_Sockets_Websocket_Nodes - Fatal编程技术网

Sockets 如何使用NodeJS将侦听一个端口的WebSocket连接到侦听另一个端口的netsocket?

Sockets 如何使用NodeJS将侦听一个端口的WebSocket连接到侦听另一个端口的netsocket?,sockets,websocket,nodes,Sockets,Websocket,Nodes,这是我尝试过但不起作用的方法。我可以将来自WebSocket连接的传入消息转发到NetSocket,但只有NetSocket接收到的第一条消息到达WebSocket后面的客户端 const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); const NetSocket = require('net'); const net = new NetSocket.Socket(); // Web

这是我尝试过但不起作用的方法。我可以将来自WebSocket连接的传入消息转发到NetSocket,但只有NetSocket接收到的第一条消息到达WebSocket后面的客户端

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

const NetSocket = require('net');
const net = new NetSocket.Socket();

// Web socket
wss.on('connection', function connection(ws) {
    console.log((new Date()) + ' Remote connection accepted ' + ws.remoteAddress);
    ws.on('message', function incoming(message) {
        console.log('Received from remote: %s', message);
        net.write(message)
    });

    ws.on('close', function(){
        console.log((new Date()) + ' Remote connection closed');
    });
});


// Net socket
net.connect(8745, '127.0.0.1', function() {
    console.log((new Date()) + ' Local connection accepted');
});

net.on('data', function(data) {
    console.log('Received from local: ' + data);
    // Iterate the connected devices to send the broadcast
    wss.clients.forEach(function each(c) {
        if (c.readyState === WebSocket.OPEN) {
          c.send(data);
        }
    });
});

net.on('close', function() {
    console.log('Local connection closed');
});

经过一项新的研究,我发现问题出在我的swift代码中

private func setReceiveHandler() {
  webSocketTask.receive { result in
    defer { self.setReceiveHandler() } // I was missing this line
    do {
      let message = try result.get()
      switch message {
      case let .string(text):
        print("Received text message: \(text)")
      case let .data(data):
因此,只需将延迟{self.setReceiveHandler()}添加到我的函数中,它就开始工作了

请注意receive处理程序开头的defer语句。它调用self.setReceiveHandler()重置套接字连接上的接收处理程序,以允许它接收下一条消息。当前,在套接字连接上设置的接收处理程序只调用一次,而不是每次接收消息时调用一次。通过使用defer语句,您可以确保在退出接收处理程序的作用域之前始终调用self.setReceiveHandler,从而确保始终从套接字连接接收下一条消息

我的信息来自: