以下是一个python套接字片段:
import socket
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
我的问题是:线路状态是否套接字连接将通过 TCP/IP 传输?到目前为止,我只使用上面的行对 TCP 连接进行编程,但可能我没有意识到这一事实。我可以使用 python 套接字对 UDP 连接进行编程吗?如何区分传输层?
这个问题与python没有严格的联系,在c ++或其他任何东西中也欢迎解释。
第二个参数确定套接字类型;socket.SOCK_DGRAM
是UDP,socket.SOCK_STREAM
是TCP套接字。这一切都假设您使用的是AF_INET
或AF_INET6
套接字系列。
在继续之前,也许您想阅读Python 套接字编程 HOWTO以及其他套接字编程教程。UDP 和 TCP 套接字之间的差异相当大,但不同的编程语言之间的差异。
Python Wiki 上有关套接字的一些信息:
创建套接字的一般语法是:
socket(socket_family, socket_type, protocol=0)
我们可以使用AF_INET
(for IPv4) 或AF_INET6
(IPv6) 作为第一个参数 i.,e for socket_family
.
socket_type
是确定要创建的套接字是 TCP 还是 UDP 的参数。对于 TCP 套接字,它将是SOCK_STREAM
,对于 UDP,它将是SOCK_DGRAM
(DGRAM - 数据报)。最后,我们可以省略将其设置为默认值的协议参数0
。
对于 TCP 套接字,您应该使用bind()
,listen()
以及accept()
用于服务器套接字和connect()
/或connect_ex()
客户端套接字的方法。而对于 UDP 套接字,您将不需要listen()
,accept()
和connect()
方法(因为 TCP 套接字是面向连接的套接字,而 UDP 套接字是无连接的套接字)。
有特定的方法可用于 UDP 发送和接收数据包,recvfrom()
并且sendto()
分别用于 TCP。有关 TCP 和 UDP 各自方法的更多信息,请参阅此套接字文档。此外,Wesley Chun 的《Core Python Applications Programming》是一本更好的书,可以了解一些关于套接字编程的基础知识。recv()
send()
主要区别在于 TCP 套接字是基于连接的。在连接到远程计算机上的另一个 TCP 套接字之前,您无法发送或接收任何内容。一旦连接,TCP 套接字只能向远程机器发送和接收。这意味着您的应用程序中的每个客户端都需要一个 TCP 套接字。UDP 不是基于连接的,您可以随时使用同一个套接字向任何人发送和接收。