Python服务器用于托管套接字和读取数据
我正在尝试创建一个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
你的问题可能出在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()