Nodejs为什么不能发送数据只能接收?求高手解决

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs为什么不能发送数据只能接收?求高手解决

var socket = io.connect(‘appwei.tk’);
socket.send(‘test’);
socket.on(‘message’,function(message){
alert(message);
$(‘showmessage’).innerHTML+=message+"</br>";
});

本地测试没问题send可以用没问题发布服务器上就挂了

3 回复

根据你提供的代码片段,看起来你在尝试使用Socket.IO进行客户端与服务器之间的通信。你的问题可能是由于对Socket.IO API的误解导致的。Socket.IO提供了一种更高级的接口来处理消息的发送和接收,而不是直接使用socket.send()方法。

解释

在Socket.IO中,正确的发送和接收消息的方式是通过emiton方法。socket.send()方法并不适用于Socket.IO,而是适用于WebSockets的基本API。

示例代码

以下是修正后的代码:

// 客户端代码
var socket = io.connect('http://appwei.tk');

// 发送消息到服务器
socket.emit('message', 'test');

// 接收来自服务器的消息
socket.on('message', function(message) {
    alert(message);
    document.getElementById('showmessage').innerHTML += message + "<br>";
});

// 服务器端代码(假设使用Express.js和Socket.IO)
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

io.on('connection', (socket) => {
    console.log('A user connected');

    // 接收客户端的消息
    socket.on('message', (data) => {
        console.log('Message received: ', data);

        // 向所有连接的客户端广播消息
        io.emit('message', `Server received: ${data}`);
    });

    // 断开连接时的操作
    socket.on('disconnect', () => {
        console.log('User disconnected');
    });
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

关键点

  1. 客户端发送消息:使用socket.emit('事件名', 数据)
  2. 客户端接收消息:使用socket.on('事件名', 回调函数)
  3. 服务器发送消息:使用io.emit('事件名', 数据)socket.emit('事件名', 数据)
  4. 服务器接收消息:使用socket.on('事件名', 回调函数)

注意事项

  • 确保服务器地址正确,并且服务器已经启动。
  • 在生产环境中,确保跨域配置正确。
  • 检查网络连接和防火墙设置,确保客户端可以连接到服务器。

通过这种方式,你可以确保客户端和服务器之间能够正确地发送和接收消息。


什么问题都没</br>var socket = io.connect(‘appwei.tk’);这有2个域名改成A域名,访问A域名就只能接收不能发送,访问B域名正常收发</br>改成B域名,访问B域名就只能接收不能发送,访问A域名正常收发</br>就是这个情况

根据你提供的代码片段,问题可能出在使用 socket.send 方法上。socket.send 是 WebSocket API 的一部分,而不是 Socket.IO 库的一部分。Socket.IO 使用自定义的协议来处理消息,因此你需要使用 socket.emit 来发送数据。

以下是一些修改后的代码示例:

// 引入 socket.io 客户端库
var socket = io.connect('http://appwei.tk');

// 发送数据
socket.emit('message', 'test');

// 接收数据
socket.on('message', function(message) {
    alert(message);
    document.getElementById('showmessage').innerHTML += message + "<br>";
});

解释:

  1. 引入 Socket.IO 客户端:确保客户端正确加载了 Socket.IO
  2. 发送数据:使用 socket.emit 而不是 socket.send
  3. 接收数据:通过 socket.on 监听 'message' 事件并处理接收到的消息。

如果上述方法仍然无法解决问题,请检查以下几个方面:

  • 确保服务器端正确配置并启用了 Socket.IO
  • 检查网络连接是否正常。
  • 检查服务器日志以获取更多错误信息。
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!