簡體   English   中英

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

[英]How to receive Socket.IO socket using native socket module in Python

當我嘗試使用本機套接字模塊從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'))

如何引導:

通常,它們(套接字的recv和send函數)在關聯的網絡緩沖區已被填充(發送)或清空(recv)時返回。 然后,他們告訴您他們處理了多少字節。 在完全解決您的消息之前,您有責任再次致電他們。

因此,據我所知, connection.recv(100000)在緩沖區緩沖區填滿之前不會返回任何數據,因此要解決此問題,您需要將緩沖區設置為較低的值(也許為2048?)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM