3

我一直很难让 CMD 模块使用标准输入的套接字。这是我所拥有的:

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时,我在服务器的控制台上没有得到任何东西。

4

1 回答 1

2

返回的文件makefile仅适用于SOCK_STREAM套接字。SOCK_DGRAM套接字没有连续字节流的概念(只有单个数据包),因此不能使用reador write

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

于 2012-10-05T06:44:15.793 回答