2010-11-09 26 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()