我一直很难让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
时,我在服务器的控制台上没有得到任何信息。
答案 0 :(得分:2)
makefile
返回的文件仅适用于SOCK_STREAM
套接字。 SOCK_DGRAM
套接字不具有连续字节流(仅限单个数据包)的概念,因此无法使用read
或write
。
您应该使用socket.SOCK_STREAM
而不是socket.SOCK_DGRAM
初始化套接字。