Python сервер для размещения сокетов и чтения данных - PullRequest
0 голосов
/ 10 ноября 2010

Я пытаюсь создать сервер Python, который будет обслуживать вызовы из внешнего источника через сокеты.Итак, я пролистал документы и скопировал этот код, я могу подключиться, но отправленные данные не отображаются.Что я делаю не так?

import SocketServer

class MyUDPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        self.data = self.rfile.readline().strip()
        print "%s wrote:" % self.client_address[0]
        print self.data
        self.wfile.write(self.data.upper())

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

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

class mysocket:
    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

И более того, если этот код правильный - как его использовать?Сейчас я просто устанавливаю сервер с помощью python server.py, который создает экземпляр MyUdpHandler, но что дальше?

1 Ответ

0 голосов
/ 10 ноября 2010

ваша проблема может заключаться в том, что server.serve_forever () никогда не возвращается, он заблокирует ваш код и ничего кроме него не будет работать.

Вы могли бы улучшить эту работу, разделив ее по потокам:

import threading
def launch_server():
    server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)
    print("working")
    server.serve_forever()

#carry on with your other code here.


#this belongs at the _bottom_ of your file! not the middle!
if __name__ == '__main__':
    server_thread = threading.Thread(target=launch_server, args=())
    server_thread.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...