recherche

Maison  >  Questions et réponses  >  le corps du texte

socket编程 - python如何进行socket连接

尝试连接 119.23.124.81:7575

服务器每5秒会返回一个{"type":"ping"},我尝试用以下代码去连接,但是无法获取到这个{"type":"ping"}:

s = socket(AF_INET, SOCK_STREAM)
# 建立连接:

s.connect(('119.23.124.81', 7575))
while True:
    print(s.recv(1024).decode('utf-8'))

s.close()

代码不会报错,但是也获取到我想要的内容

请问要如何写才能获取到这个{"type":"ping"}


巴扎黑巴扎黑2787 Il y a quelques jours657

répondre à tous(3)je répondrai

  • 大家讲道理

    大家讲道理2017-04-18 10:27:11

    J'ai compris, il s'avère que c'est le protocole websocket utilisé, pas un socket ordinaire

    Utilisez simplement la bibliothèque websocket à la place. Le code est le suivant :

    from websocket import create_connection
    
    
    ws = create_connection("ws://42.96.131.185:7575")
    print("Sending 'Hello, World'...")
    for i in range(10000):
        ws.send(b"Hello, World")
        print("Sent")
    print("Reeiving...")
    result = ws.recv()
    print("Received '%s'" % result)
    ws.close()

    répondre
    0
  • 迷茫

    迷茫2017-04-18 10:27:11

    Se référer à la documentation officielle

    
    # Echo server program
    import socket
    
    HOST = ''                 # Symbolic name meaning all available interfaces
    PORT = 50007              # Arbitrary non-privileged port
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr = s.accept()
    print 'Connected by', addr
    while 1:
        data = conn.recv(1024)
        if not data: break
    conn.sendall(data)
    conn.close()
    

    et

    
    import SocketServer
    
    class MyTCPHandler(SocketServer.BaseRequestHandler):
    """
    The request handler class for our server.
    
    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """
    
        def handle(self):
            # self.request is the TCP socket connected to the client
            self.data = self.request.recv(1024).strip()
            print "{} wrote:".format(self.client_address[0])
            print self.data
            # just send back the same data, but upper-cased
            self.request.sendall(self.data.upper())
    
    if __name__ == "__main__":
        HOST, PORT = "localhost", 9999
    
        # Create the server, binding to localhost on port 9999
        server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    
        # Activate the server; this will keep running until you
        # interrupt the program with Ctrl-C
        server.serve_forever()

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:27:11

    Étant donné que les données que vous envoyez sont un objet de dictionnaire, lors de l'envoi de données via le socket, utilisez le module pickle ou json pour sérialiser les données avant de les envoyer. En conséquence, l'extrémité réceptrice doit utiliser pickle ou json pour la désérialisation.

    répondre
    0
  • Annulerrépondre