如何在Python中使用本机套接字模块接收Socket.IO套接字

时间:2018-07-19 00:08:30

标签: javascript python sockets socket.io

当我尝试使用本机套接字模块从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'))

1 个答案:

答案 0 :(得分:0)

来自this的指南:

  

通常,它们 [socket的接收和发送功能] 在关联的网络缓冲区已满(发送)或    清空(recv)。然后,他们告诉您他们处理了多少字节。是你的    有责任再次致电给他们,直到您的信息得到完全处理。

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