猿问

python中的TCP连接

好的,我无法理解这段代码:


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

有什么作用:


socket.AF_INET

socket.SOCK_STREAM

做?我真的阅读了关于它们的所有内容,但我无法理解它们的作用,你能用简单的话解释我吗?感谢阅读,祝你有美好的一天!


青春有我
浏览 98回答 3
3回答

慕容708150

socket.AF_INET=套接字地址的类型socket.SOCK_STREAM=插座类型解释每当您提供socket.AF_INET给您的服务器时,您都会指示它侦听 IPv4 地址,并指示您的客户端连接到 IPv4 地址。这将起作用。IPv6 也一样。然而,将它们混合起来并没有。那将是同样的我等待你在 StackOverflow 上与我交谈,而你通过电子邮件向我发送消息。我们不是在看同一个地方,所以我们将无法交流。同为socket.SOCK_STREAM(和其他值)。不同之处在于它告诉python我们将socket&nbsp;如何进行通信。socket.SOCK_STREAM将是TCP,而socket.SOCK_DGRAM将是UDP。让我们回到我们的“真实世界”示例,假设我们同意通过电子邮件进行交流。我可以指望任何一个电子邮件从你(我解释你一定要告诉所有)或几个(与你有什么每封电子邮件中说的部分)。这与 TCP 与 UDP 相同。参考好吧,我想你已经读过两篇了:python的socket模块python的套接字如何可能:SO:什么是地址族?维基百科:IPv4另外,我猜:套接字类型之间的差异&nbsp;(以及其中的引用)维基百科:网络套接字 - 类型超长的解释,但主要是测试所以。如果毕竟你不明白。我们试试看:# server.pyimport sockets = socket.socket()s.bind(('localhost', 5050))s.listen(5)while True:&nbsp; &nbsp; (clientsocket, address) = s.accept()&nbsp; &nbsp; print 'client connected'和:# client.pyimport sockets = socket.socket(socket.AF_INET)s.connect(('127.0.0.1', 5050))print "Yeah! I'm connected :)"到目前为止,一切都在如何。我们启动我们的服务器:$ python server.py然后我们启动我们的客户端:$ python client.pyYeah! I'm connected :)一切正常。那挺好的。现在,让我们改变我们的客户:# client.pyimport sockets = socket.socket(socket.AF_INET6)s.connect(('127.0.0.1', 5050))print "Yeah! I'm connected :)"并重新启动我们的新客户端:$ python client.pyTraceback (most recent call last):&nbsp; File "client.py", line 4, in <module>&nbsp; &nbsp; s.connect(('127.0.0.1', 5050))&nbsp; File "/.../lib/python2.7/socket.py", line 228, in meth&nbsp; &nbsp; return getattr(self._sock,name)(*args)socket.error: [Errno 65] No route to host哎呀!一切都破裂了!但是会发生什么? 127.0.0.1:5050是一个 IPv4 地址,因此socket模块告诉我们它对我们正在做的事情不满意!事实上,我们说过我们的连接将使用 IPv6 地址,但我们为其提供了 IPv4 地址。好的...但是如果我使用相同的地址但在 IPv6 中,它会起作用吗?让我们尝试更改我们的客户端(您可以查看此 SO 答案以获取相当于127.0.0.1IPv6 的答案):# client.pyimport sockets = socket.socket(socket.AF_INET6)s.connect(('::1', 5050))print "Yeah! I'm connected :)"和我们的服务器:# server.pyimport sockets = socket.socket(socket.AF_INET6)s.bind(('::1', 5050))s.listen(5)while True:&nbsp; &nbsp; (clientsocket, address) = s.accept()&nbsp; &nbsp; print 'client connected'我们重新启动我们的服务器和我们的客户端:$ python client.pyYeah! I'm connected :)成功!可以使用相同的程序来理解/测试socket.SOCK_STREAM参数(但我认为我的答案已经足够长了)。希望这有帮助:)。

qq_遁去的一_1

AF_INET在那里有很好的描述。它基本上是您用于将数据发送到另一个套接字的方法。SOCK_STREAM 基本上描述了您正在使用 TCP 发送,并且本质上描述了您发送和接收数据(IP 地址和端口号)的端点的规则。但是由于您似乎对这些术语感到困惑,我建议您将它们视为有关如何在两个套接字端点之间传输数据的规范。
随时随地看视频慕课网APP

相关分类

Python
我要回答