+ -
当前位置:首页 → 问答吧 → 菜鸟求助python网络编程

菜鸟求助python网络编程

时间:2011-09-30

来源:互联网

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

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

#!/usr/bin/python
import SocketServer

class 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/python
import socket
import sys
import select

HOST, PORT = "172.23.22.40", 6801
sock = 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()        

作者: silver0924   发布时间: 2011-09-30

最讨厌见到“没有成功”这种含糊的描述。如果你真的仔细看过了问题的现象,是不会使用“没有成功”这种词汇来描述问题的,而是会很自然的使用更准确的现象描述。只有在你自己连问题的现象都稀里糊涂的时候,才会这么说。

作者: iambic   发布时间: 2011-09-30