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 如何将send()函数应用于套接字对象?_Python_Sockets - Fatal编程技术网

Python 如何将send()函数应用于套接字对象?

Python 如何将send()函数应用于套接字对象?,python,sockets,Python,Sockets,编辑:我使用不推荐的apply()进行pickle漏洞攻击,用于安全竞赛apply似乎是使用pickle指令字符串调用方法的方式。不过,我很乐意知道更好的方法 我试图使用apply()在套接字上调用send()方法。\u socketobject,但收到一条奇怪的错误消息 In [130]: client Out[130]: <socket._socketobject at 0x108d0bfa0> In [131]: apply(socket._socketobject.send

编辑:我使用不推荐的
apply()
进行pickle漏洞攻击,用于安全竞赛
apply
似乎是使用pickle指令字符串调用方法的方式。不过,我很乐意知道更好的方法

我试图使用
apply()
套接字上调用
send()
方法。\u socketobject
,但收到一条奇怪的错误消息

In [130]: client
Out[130]: <socket._socketobject at 0x108d0bfa0>

In [131]: apply(socket._socketobject.send, (client, "stuff"))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-131-3f9b1f1de824> in <module>()
----> 1 apply(socket._socketobject.send, (client, "stuff"))

TypeError: 'member_descriptor' object is not callable
这就是我最初获得名为client的套接字对象的方式:

In [107]: import signal

In [108]: sock = socket.socket()

In [109]: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

In [110]: sock.bind(('0.0.0.0', 1025))

In [111]: sock.listen(10)

In [112]: signal.signal(signal.SIGCHLD, signal.SIG_IGN)
Out[112]: 0
In [113]: client, addr = sock.accept()
感谢您的帮助

有趣的是,send()属于function类型

不对
send
从其
\uuu get\uuu()方法返回一个函数,因为它是一个函数。如果您想要得到要调用的实际函数,您将需要自己与描述符协议接口

>>> dir(socket._socketobject.send)
['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__name__', '__new__', '__objclass__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> type(socket._socketobject.send)
<type 'member_descriptor'>
目录(socket.\u socketobject.send) “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU“,”集合“,”集合属性“,”大小属性“,”结构“,”子类钩子“] >>>类型(socket.\u socketobject.send)
为什么要使用
apply
?自Python2.3.1以来,它一直被弃用<代码>应用已(非常)不推荐使用。2.这不是应该如何使用的请参见上面的编辑。除了我不应该使用它,因为它已经被弃用了之外,它应该如何使用呢?非常感谢你澄清这一点,我将不得不对它进行更深入的研究
>>> dir(socket._socketobject.send)
['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__name__', '__new__', '__objclass__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> type(socket._socketobject.send)
<type 'member_descriptor'>