首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对socket.socket()的澄清

对socket.socket()的澄清
EN

Stack Overflow用户
提问于 2014-08-13 11:47:21
回答 2查看 682关注 0票数 1

我正在阅读一本名为“暴力Python”的书,其中有一个脚本可以使用套接字模块来提取FTP数据

代码语言:javascript
复制
>>> import socket
>>> socket.setdefaulttimeout(2)
>>> s = socket.socket()
>>> s.connect(("192.168.95.148",21)) 
>>> ans = s.recv(1024)
>>> print ans

有人能解释一下s = socket.socket()部分吗?

s.connect(("192.168.95.148",21))就像在说:

socket.socket.(connect(("192.168.95.148",21)))

只是对s变量感到困惑,以及为什么需要说明两次?我希望这是有意义的,我相信这不仅仅适用于这个方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-13 11:51:06

socket()是库socket中的一个函数,所以当您需要使用socket()函数时,您可以通过socket.socket()引用它。

或者,您可以这样做,from socket import socket和do s = socket()

文档

使用给定的地址系列、套接字类型和协议号创建新套接字。地址系列应该是AF_INET (默认)、AF_INET6或AF_UNIX。套接字类型应该是SOCK_STREAM (默认)、SOCK_DGRAM或其他SOCK_常量之一。协议号通常为零,在这种情况下可以省略。

当您执行s.connect(("192.168.95.148",21))时,它等同于socket.socket().connect(("192.168.95.148",21))

在您的示例中,将socket.socket()分配给s是有意义的,因为您多次使用它。

代码语言:javascript
复制
>>> s.connect(("192.168.95.148",21)) 
>>> ans = s.recv(1024)
>>> print ans

肯定比,

代码语言:javascript
复制
>>> socket.socket().connect(("192.168.95.148",21)) 
>>> ans = socket.socket().recv(1024)
>>> print ans

由于您还在学习编程,并且在这个特定的上下文中,您可能需要查看干的原则。我还建议您通过PEP8标准来获得良好的编码实践。

更进一步,如果您对函数或语句的作用有疑问,可以使用help函数。

help(socket)摘录

描述了本模块提供的套接字操作及相关功能。在Unix上,它支持IP (Internet Protocol)和Unix域套接字。在其他系统上,它只支持IP。特定于套接字的函数可作为套接字对象的方法使用。 函数: socket() --创建一个新的套接字对象套接字对() --创建一对新的套接字对象* from IP () --从打开的文件描述符* gethostname()创建一个套接字对象--返回当前主机名gethostbyname() --将主机名映射到其IP编号gethostbyaddr() --将一个IP号或主机名映射到DNS info getservbyname() --将服务名称和协议名映射到端口号getprotobyname() --将协议名(例如‘)映射到ntohs(),ntohl() --将16位,32位int从网络转换为主机字节顺序hton(),htonl() --转换16,32位int从主机到网络字节顺序inet_aton() --将IP附加字符串(123.45.67.89)转换为32位打包格式的inet_ntoa() --将32位压缩格式IP转换为字符串(123.45.67.89) ssl() -安全套接字层支持(只有在配置好的情况下可用) socket.getdefaulttimeout() -获取默认超时值socket.setdefaulttimeout() -设置默认超时值create_connection() -连接到地址,具有可选超时和可选源地址。

help(socket.socket())摘录

->套接字对象\\打开给定类型的套接字。“家族”参数指定了“\”地址族;它默认为“AF_INET”。类型参数指定这是流(SOCK_STREAM,这是默认的)\\还是数据报(SOCK_DGRAM)套接字。协议参数默认为0,并指定默认协议。接受关键字参数。套接字对象表示网络连接的一个端点。

总之,我们知道socket()是一个创建新套接字对象的函数,这个函数可以在socket库中使用。

票数 1
EN

Stack Overflow用户

发布于 2014-08-13 11:59:14

来自Python主干socket.py文件:

功能: socket() --创建一个新的套接字对象

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25285327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档