简单的Python服务器

0 投票
1 回答
5197 浏览
提问于 2025-04-16 06:49

我该如何启动一个简单的Python服务器,让我可以从外部连接到这个服务器的套接字呢?

我试过:

import SocketServer

class MyUDPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        data = self.request[0].strip()
        socket = self.request[1]
        print "%s wrote:" % self.client_address[0]
        print data
        socket.sendto(data.upper(), self.client_address)

if __name__ == "__main__":
    HOST, PORT = "localhost", 80
    try:
        server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)
        print("works")
        server.serve_forever()
        serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        serversocket.bind((socket.gethostname(), 80))
        serversocket.listen(5)     
    except:
        print("nope")

        while True:
            (clientsocket, address) = serversocket.accept()
            ct = client_thread(clientsocket)
            ct.run()

但是当我向服务器发送数据时,我没有收到任何信息。我该如何修改这段代码,以便查看是否有人在发送数据?


编辑

现在我找到了这段代码:

class mysocket:
    """demonstration class only
      - coded for clarity, not efficiency
    """

    def __init__(self, sock=None):
        if sock is None:
            self.sock = socket.socket(
                            socket.AF_INET, socket.SOCK_STREAM)
            else:
                self.sock = sock

    def connect(self, host, port):
        self.sock.connect((host, port))

    def mysend(self, msg):
        totalsent = 0
        while totalsent < MSGLEN:
            sent = self.sock.send(msg[totalsent:])
            if sent == 0:
                raise RuntimeError("socket connection broken")
            totalsent = totalsent + sent

    def myreceive(self):
        msg = ''
        while len(msg) < MSGLEN:
            chunk = self.sock.recv(MSGLEN-len(msg))
            if chunk == '':
                raise RuntimeError("socket connection broken")
            msg = msg + chunk
        return msg

但是我该如何使用这些代码来监听套接字并接收发送过来的数据呢?

1 个回答

3

最简单的解决办法就是使用SocketServer,它是Python标准库的一部分。

撰写回答