使用带插座的CMD模块

时间:2012-10-05 04:34:31

标签: python

我一直很难让CMD模块使用套接字来进行stdin。这就是我所拥有的:

class Server(cmd.Cmd):
    use_rawinput = False 

    def __init__(self, port): 
        self.port = port
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.sock.bind(("", port))
        f = self.sock.makefile(mode='rw') 
        cmd.Cmd.__init__(self, stdin = f, stdout=sys.stdout) 


    def do_register(self, username):    
        print username

当我连接客户端并尝试命令register user1时,我在服务器的控制台上没有得到任何信息。

1 个答案:

答案 0 :(得分:2)

makefile返回的文件仅适用于SOCK_STREAM套接字。 SOCK_DGRAM套接字不具有连续字节流(仅限单个数据包)的概念,因此无法使用readwrite

您应该使用socket.SOCK_STREAM而不是socket.SOCK_DGRAM初始化套接字。