2010-11-09 147 views
0

我該如何啓動一個簡單的python服務器,它將允許我連接到某些外部源的套接字?簡單的Python服務器

我已經試過:

import SocketServer 

class MyUDPHandler(SocketServer.BaseRequestHandler): 
    def handle(self): 
     data = self.request[0].strip() 
     socket = self.request[1] 
     print "%s wrote:" % self.client_address[0] 
     print data 
     socket.sendto(data.upper(), self.client_address) 

if __name__ == "__main__": 
    HOST, PORT = "localhost", 80 
    try: 
     server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler) 
     print("works") 
     server.serve_forever() 
     serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     serversocket.bind((socket.gethostname(), 80)) 
     serversocket.listen(5)  
    except: 
     print("nope") 

     while True: 
      (clientsocket, address) = serversocket.accept() 
      ct = client_thread(clientsocket) 
      ct.run() 

但是當我送點東西給服務器我沒有得到任何信息。我如何更改此代碼以查看是否有人正在發送一些數據?


編輯

現在我發現這個代碼:

class mysocket: 
    """demonstration class only 
     - coded for clarity, not efficiency 
    """ 

    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 

,但如何使用這個東西只聽插座和接收數據發送?

+2

您想承載套接字,還是連接到遠程服務器上的某個套接字? – 2010-11-09 22:04:35

+0

我想主持套接字進一步使用。只是閱讀文檔,所以我還沒有嘗試過任何東西。 – decarbo 2010-11-09 22:21:30

回答

2

最簡單的解決方案是SocketServer,它是Python標準庫的一部分。