Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python中的Twisted协议获取裸套接字fd?_Python_Sockets_Twisted - Fatal编程技术网

从python中的Twisted协议获取裸套接字fd?

从python中的Twisted协议获取裸套接字fd?,python,sockets,twisted,Python,Sockets,Twisted,我想做的是将Twisted与python的stdlib中的Cmd模块结合起来 简而言之,我希望能够从一个连接的协议中获取裸体套接字fd对象,用作stdlib中cmd.cmd模块的stdin 总之,与服务器交互的客户端使用Cmd模块处理命令并将这些命令发送到服务器 在我的服务器上,我还希望使用与内置Cmd模块相同的命令处理方法。为此,我需要指定命令解释器的stdin和stdout。 我可以用内置的sockets模块轻松地实现这一点,但如果可能的话,我希望使用twisted 下面是一些代码,用于实现

我想做的是将Twisted与python的stdlib中的Cmd模块结合起来

简而言之,我希望能够从一个连接的协议中获取裸体套接字fd对象,用作stdlib中cmd.cmd模块的stdin

总之,与服务器交互的客户端使用Cmd模块处理命令并将这些命令发送到服务器

在我的服务器上,我还希望使用与内置Cmd模块相同的命令处理方法。为此,我需要指定命令解释器的stdin和stdout。 我可以用内置的sockets模块轻松地实现这一点,但如果可能的话,我希望使用twisted

下面是一些代码,用于实现我对普通套接字的要求:

(与telnet合作)

这几乎就是我想做的。我只是很快地把它打出来,所以我可能遗漏了什么。一半有效。当前,如果您将telnet连接到服务器,如:

telnet 127.0.0.1 2319
然后你发送“sayhi”什么都没发生。但是,如果在启动服务器的终端上键入“sayhi”(有一个(Cmd)提示符),则输出将转到telnet客户端。所以cmd.cmd的stdout正在工作。但不是stdin。这可能与telnet默认发送CR-LF('\r\n')有关。其中cmd模块可能只侦听\n

那么,如何从twisted中的协议获取fd或文件对象,以实现我在这里尝试使用裸套接字实现的功能呢

还有关于连接到服务器的telnet的哪些输入未注册到CmdProcessor的任何见解吗

欢迎提供任何建议、提示或建议。(等等,不,没有指针。)
谢谢。

我建议您可以看看


通常,Twisted的要点是而不是直接使用Python套接字对象。这是Twisted工作的一大部分。当您想使用Twisted与网络交互时,如果您考虑的是最低级别,您可以使用Twisted的API—协议和传输。

您可以添加use\u rawinput=False

class CmdProcessor(cmd.Cmd, object):
    use_rawinput = False
    def __init__(self, sock, addr):
    ....

这将产生来自telnet的对sayhi的回复

谢谢!这解决了我的一个问题。但它应该是:self.use_rawinput=false哦,nvm,我知道你把它放在哪里了。(在init上面,这是有效的:)好的,谢谢你推荐到沙井。是的,我知道同时使用普通插座和扭曲插座有点不合适。我只是在学习扭曲,不知道是否可以做到。另外,我需要一些带有fd或fileno()的东西来用作stdin和stdout。
class CmdProcessor(cmd.Cmd, object):
    use_rawinput = False
    def __init__(self, sock, addr):
    ....