当我尝试使用本机套接字模块从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'))
答案 0 :(得分:0)
来自this的指南:
通常,它们 [socket的接收和发送功能] 在关联的网络缓冲区已满(发送)或 清空(recv)。然后,他们告诉您他们处理了多少字节。是你的 有责任再次致电给他们,直到您的信息得到完全处理。
因此,据我所知,connection.recv(100000)
不会在缓冲区已满之前不返回任何数据,因此,要解决此问题,您需要将缓冲区设置为较低的值(也许是2048?)。