【问题标题】:How to receive Socket.IO socket using native socket module in Python如何在 Python 中使用本机套接字模块接收 Socket.IO 套接字
【发布时间】:2018-07-19 00:08:30
【问题描述】:

当我尝试使用本机套接字模块从 Socket.IO 接收消息时,我收到的是以下消息:

GET /socket.io/?EIO=3&transport=polling&t=MIlsTQ_ HTTP/1.1

Host: localhost:5000

Connection: keep-alive

Accept: */*

Origin: http://localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36

DNT: 1

Referer: http://localhost:8080/

Accept-Encoding: gzip, deflate, br

Accept-Language: en-US,en;q=0.9

我该如何解决这个问题,并接收消息而不是数据?

客户端代码:

  socketsSend: function() {
  const socket = io.connect('http://localhost:5000');
  /*var socket = io.Socket('http://localhost', {
    port: 5000
  });*/
  socket.connect();
  socket._connectTimer = setTimeout(function() {
   socket.close();
  }, 500);

    socket.on('connect', function() {
// socket connected successfully, clear the timer
    clearTimeout(socket._connectTimer);
});

服务器代码:

import socket
import json
addr = 'localhost',5000
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(addr)
sock.listen(3)
while True:
    connection, client_address = sock.accept()
    data = connection.recv(100000)
    print(data.decode('utf-8'))

【问题讨论】:

    标签: javascript python sockets socket.io


    【解决方案1】:

    来自this如何指导:

    一般来说,它们[socket 的接收和发送函数]在相关的网络缓冲区已被填充(发送)或 清空(接收)。然后他们告诉你他们处理了多少字节。这是你的 有责任再次致电他们,直到您的消息得到完全处理。

    因此,据我了解,connection.recv(100000) 在其缓冲区填满之前不会返回任何数据,因此要解决此问题,您需要将缓冲区设置为较低的值(可能是 2048 年?)。

    【讨论】:

    • 普通套接字不会出现该问题。
    猜你喜欢
    • 2021-10-11
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2016-01-27
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多