реализация простой обработчик потока с сокетами


Я пытаюсь реализовать простой стример данных в Python с сокетами. Рассмотрим один сервер и один или несколько клиентов. Я просто хочу, чтобы прочитать данные с сервера, обрабатывает его и отправляет его клиенту. Вот как я делаю это сейчас:

        outputsocket = socket.socket()
        outputsocket.bind((self.outputaddress, self.outputport))
        outputsocket.listen(2)
        inputsocket = socket.socket()
        rsocks, wsocks = [], []
        rsocks.append(outputsocket)
        rsocks.append(inputsocket)
        recv_data = []

        try:
            inputsocket.connect((self.inputaddress, self.inputport))
            while True:
                try:
                    reads, writes, errs = select.select(rsocks, [], [])
                except:
                    return
                for sock in reads:
                    if sock == outputsocket:
                        client, address = sock.accept()
                        wsocks.append(client)
                    elif sock == inputsocket:
                        data_from_socket = sock.recv(8192)

                if data_from_socket:
                    outdata = process_data(data_from_socket)
                    if wsocks:
                       reads, writes, errs = select.select([], wsocks, [], 0)
                       for sock in writes:
                           sock.send(outdata)
        except KeyboardInterrupt:
            inputsocket.close()
            outputsocket.close()
            # etc

Очевидно, его лишили пример, но думаю вы поняли мысль. У кого-нибудь есть лучше идеи?



1641
4
задан 11 декабря 2011 в 06:12 Источник Поделиться
Комментарии
1 ответ

На благо других людей (потому что этот ответ с опозданием на два года):

Мне пришлось быстро реализовать решение гнездом для размещения тестирования функции, требуемые их. В итоге через socketserver для упрощения реализации, т. е. лишь около десятка линий были нужны.

Пример ниже является в значительной степени прямо из розетки сервер документы:

""" creates, activates a socket server """
import socketserver

HOST, PORT = "localhost", 9999

class MyTCPHandler(socketserver.BaseRequestHandler):
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())

print("Creating the server, binding to localhost on port", PORT)
server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)

def activate_server():
server.serve_forever()

def stop_server():
print("Shutting the server on port", PORT)
server.shutdown()

if __name__ == "__main__":
activate_server()

2
ответ дан 17 декабря 2013 в 03:12 Источник Поделиться