2010-11-09 33 views
0

我试图创建一个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的一个实例,但接下来呢?

+0

,而且如果这个代码是正确的 - 怎么告呢?我现在只是使用python server.py来创建MyUdpHandler的一个实例,但接下来呢? – decarbo 2010-11-09 23:24:00

+0

我们应该如何知道您想如何使用代码? – Falmarri 2010-11-09 23:43:08

+0

我想通过套接字将一些数据发送到我的服务器,并返回并在控制台中显示它。 – decarbo 2010-11-10 00:23:40

回答

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()