Новичок здесь. Я пытаюсь создать простой TCP-сервер, это запросы процесса с использованием SocketServer. Так или иначе, метод handle() не вызван.Простой TCP-сервер в python
Версия: 2.4.3 на Linux
Вот соответствующий код:
#!/usr/bin/python -u
import socket;
import SocketServer
import time;
import threading;
class EchoRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
# Echo the back to the client
data = self.request.recv(1024)
self.request.send(data)
return
class MyThreads(threading.Thread):
def __init__(self):
self.server = None;
threading.Thread.__init__(self);
def run(self):
if self.server == None:
address = ('localhost', 40000);
self.server = SocketServer.TCPServer(address, EchoRequestHandler);
# The following line partially fixed the problem
self.server.serve_forever();
if __name__ == '__main__':
thr = MyThreads();
thr.setDaemon(True);
thr.start();
# Connect to the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 40000))
# Send the data
message = 'Hello, world'
print 'Sending : "%s"' % message
len_sent = s.send(message)
# Receive a response
print 'Sending : "%s"' % message
response = s.recv(len_sent)
print 'Received: "%s"' % response
код создает сокет, я могу видеть его из командной строки с помощью NETSTAT. Но в отладчике (python -m pdb) я вообще не вижу код в методе run(). И handle() также не вызван. Поэтому он подключается к сокету, но ничего не получает.
Вы посмотрели пример [здесь] (http://docs.python.org/2/library/socketserver.html)? Я не вижу вызова 'serve_forever()' в вашем коде. – larsks
Кроме того, вам не нужны точки с запятой после операторов 'import'. – larsks
Я знаю, это просто перенос от других привычек программирования. Я не могу понять, где использовать serve_forever() в этом коде. Я немного смущен. –