这条线是什么意思?
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
这种语法对socket.socket()
和socket.AF_INET`意味着什么?
我们不能只使用AF_INET和Stream作为参数吗?
import socket # for socket
import sys
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Socket successfully created"
except socket.error as err:
print "socket creation failed with error %s" %(err)
# default port for socket
port = 80
try:
host_ip = socket.gethostbyname('www.google.com')
except socket.gaierror:
# this means could not resolve the host
print "there was an error resolving the host"
sys.exit()
# connecting to the server
s.connect((host_ip, port))
print "the socket has successfully connected to google \
on port == %s" %(host_ip)
答案 0 :(得分:1)
对象名称驻留在名称空间 - 包含名称的空间。模块(例如,socket
)具有自己的命名空间。语法是:
namespace.name
所以socket.socket
表示来自socket
模块的socket
名称(恰好是一个函数) - 模块名称首先是函数名称。如果我们省略命名空间,那么它将假定当前的命名空间,在一个简单的单个文件程序中称为__main__
。
我们可以安排它,所以我们将名称导入我们自己的命名空间,不需要指定模块名称,这就是你要求的:
from socket import *
但危险有几个原因,称为名称空间污染。
一个是我们无法轻易确定某些内容来自何处 - 您展示的代码非常短且不典型。
另一个原因是命名空间冲突。如果两个模块都使用相同的名称,例如closedown
,该怎么办?定义的最后一个是将要使用的那个 - 没有警告说一个人屏蔽了另一个因为python被设计为动态的。
所以我们知道socket.socket
来自socket
模块,而不是来自描述汽车工具或涉及电路的模块。如果我们希望我们可以在同一个程序中使用所有三个,但我们必须首先指定命名空间。
不幸的是,你会看到from module import *
非常多,因为人们很懒。你可以在一个小程序中侥幸逃脱它,但你会冒险 - 随着时间的推移,程序变得越来越大,越来越复杂,它们永远不会变得更小更简单。
还有其他方法可以使用import
:您可以限制只导入某些名称,并且可以创建别名,但在使用它们之前,您应该了解有关编程的更多信息。他们有自己的用途,但在适当的时候做出判断决定。
答案 1 :(得分:1)
您已导入socket
模块,因此您使用的该模块中的所有内容都将包含" socket.
"在它面前。
所以socket.socket()
表示从socket()
模块运行socket
函数。
您必须编写socket.AF_INET
,因为AF_INET
也来自socket
模块,因此这意味着从AF_INET
模块获取socket
常量。类似的逻辑适用于socket.SOCK_STREAM
。
有关套接字的更多信息:https://docs.python.org/2/library/socket.html
此外,在学习一般代码方面,复制代码然后尝试理解它可以工作,但尝试理解底层概念然后编写自己的代码会更加强大。
答案 2 :(得分:0)
许多Python标准库是底层系统库的相当薄的包装器。它们揭示了底层操作系统设施的许多特性,您必须熟悉底层系统才能正确理解它们的语义。
如果您真的想了解套接字,那么该主题有许多优秀的介绍。他们中的大多数人都需要熟悉C,这可能会让人分心(但如果你希望花更多的时间来阅读和编写代码,那么理解C的基础也可能是你时间的一个很好的投资)。 / p>
您可以通过对底层设施进行适当的封装,为Python socket
模块创建更加pythonic的替代品。但是,目前还不清楚它是否会起到任何有用的作用。套接字的大多数琐碎的用法都是通过少量略微不透明但通常足够的"复制/粘贴编程"大多数读者会大致了解代码中发生的事情;其他人参与其中足以让他们确实需要完全访问和了解基础设施。