首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

初学者python网络编程

2012-02-22 
菜鸟求助python网络编程以前用C语言中的select写过程序,最近在看python,发现python中不仅有底层的select还

菜鸟求助python网络编程
以前用C语言中的select写过程序,最近在看python,发现python中不仅有底层的select还有比较高级的SocketServer,就向写一个简单的小程序试试,结果没有成功,客户端与服务端不能互相通信,我自己分析师select调用出问题了,但看ActivePython的文档,关于select.select的说明也很少,还请大家帮忙看看

服务端,用SocketServer.TCPServer类写的,是照搬python文档中的例子

Python code
#!/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()


客户端,我自己用select写的
Python code
#!/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()        


[解决办法]
r, w, e = select.select([sock, sys.stdin,], [], [] )
其中r传值的问题,看下参数设置是否错误
[解决办法]
select 是用做服务端 接受客户端连接请求的, 你的客户端用select做啥

热点排行