菜鸟求助python网络编程
以前用C语言中的select写过程序,最近在看python,发现python中不仅有底层的select还有比较高级的SocketServer,就向写一个简单的小程序试试,结果没有成功,客户端与服务端不能互相通信,我自己分析师select调用出问题了,但看ActivePython的文档,关于select.select的说明也很少,还请大家帮忙看看
服务端,用SocketServer.TCPServer类写的,是照搬python文档中的例子
#!/usr/bin/pythonimport SocketServerclass MyTCPHandler(SocketServer.BaseRequestHandler): def handle(self): print "client: %s" % self.client_address[0] self.data = self.request.recv(1024).strip() if not self.data: self.close() print self.data self.request.send(self.data.upper())if __name__ == '__main__': HOST, PORT = "172.23.22.40", 6801 server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) server.serve_forever()
#!/usr/bin/pythonimport socketimport sysimport selectHOST, PORT = "172.23.22.40", 6801sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.connect((HOST, PORT))sock.send("hello world")while True: r, w, e = select.select([sock, sys.stdin,], [], [] ) for rd in r: if rd == sock: data = sock.recv(256) if not data: break else: print "Server: %s" % data if rd == sys.stdin: msg = sys.stdin.readline() print "STDIN: %s" % msg sock.send(msg + "\n")sock.close()