python – 从扭曲的服务器向特定客户端发送数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 从扭曲的服务器向特定客户端发送数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2726字,纯文字阅读大概需要4分钟。
内容图文
![python – 从扭曲的服务器向特定客户端发送数据](/upload/InfoBanner/zyjiaocheng/724/1d2a9fa1207641afa7e55554e9f16858.jpg)
我使用twisted python编写了服务器部分.现在有4个客户端连接到服务器,后者向服务器发送一些数据.如果客户端1向服务器发送一些数据,则服务器将该数据转发给客户端4,类似地,当客户端2向服务器发送数据时,服务器将该数据转发给客户端3.因此我的问题是如何根据IP地址选择特定客户端我必须向其发送数据.在我看到的使用代码后向客户端发送数据的扭曲示例中
self.transport.write("string")
如何指定我必须向其发送数据的客户端的IP地址?
我在tcp服务器和客户端的服务器也是tcp(python twisted)
解决方法:
self.transport.write(“string”)
在你所指的例子中,self是Protocol的一个实例或Protocol的子类(或者提供没有子类化Protocol的IProtocol的对象,这也完全没问题).
因此,self.transport是一个提供ITransport的对象(可能它提供了更具体的ITCPTransport或ISSLTransport,但在这个问题的上下文中并不重要).
在Twisted中,提供ITransport的对象表示两个端点之间的连接.此类连接可能是IPv4 / TCP连接或IPv6 / TLS连接或AF_UNIX连接.所有这些类型的连接的共同点是它们只有两个端点.数据可以从一个端点“发送”并在另一个端点“接收”(反之亦然).
self.transport.write(“string”)显然不包含任何寻址信息的原因是self.transport已经包含该信息.
由于self.transport表示一个连接(并且只有一个连接:不多也不少),并且每个连接都有两个端点,这两个端点的地址必然是self.transport的一部分(如果不是,self.transport就无法表示那个连接).
并且该对象实际上比这更具体:它代表连接的一侧.它知道两个端点中的哪一个“在这里”,哪个在其他地方.这意味着当您向self.transport写入数据时,只有一个可以发送的地址:self.transport表示的连接的端点,它不是“here”.
按照惯例,该端点具有名称.它是“同行”.接口ITransport定义了一个方法getPeer,它向您公开传输对象所代表的连接的“对等”地址. self.transport.getPeer()返回表示该地址的对象.该对象的确切形状取决于您拥有的连接类型.
您问我如何根据IP地址选择特定客户端.如果确实存在流经系统的数据的目的地由IP地址明确指定的情况,则可以使用getPeer查找与所需地址匹配的连接.
但是,在建立连接后停止使用连接的端点地址更为常见.由于NAT的部署程度,IP地址信息往往不可靠.在您的应用程序级协议中嵌入IP地址并不总是错误的,但很难想象它的正确例子.
幸运的是,替代方案更容易. self.transport已代表某种连接.这只是一个普通的旧Python对象.一旦您知道哪两个客户端要彼此交换数据,您只需要使用这些对象将数据发送到正确的位置.
例如,如果您的服务器只接受四个连接,并且工厂保存对IProtocol提供程序的引用,则会创建它来处理每个连接(请考虑一下这一点:因为每个ITransport提供程序只代表一个连接,它是否意味着具有传输属性引用其中一个的协议对象?如果两个协议对象引用相同的传输…并且单个协议对象的传输属性不可能引用多个对象… )作为属性一,二,三,四,然后当其中一个协议对象实现其dataReceived方法时,如下所示:
def dataReceived(self, bytes):
message = self._parseNewData(bytes)
if message.complete():
self.factory.four.transport.write(message.tostring())
这必须将数据写入建立到服务器的第四个连接.此示例中没有明确的寻址.只是小心使用某些Python对象.
仔细使用某些Python对象是这个问题的总体答案.
内容总结
以上是互联网集市为您收集整理的python – 从扭曲的服务器向特定客户端发送数据全部内容,希望文章能够帮你解决python – 从扭曲的服务器向特定客户端发送数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。