14

以下是一个python套接字片段:

import socket
socket.socket(socket.AF_INET, socket.SOCK_STREAM)

我的问题是:线路状态是否套接字连接将通过 TCP/IP 传输?到目前为止,我只使用上面的行对 TCP 连接进行编程,但可能我没有意识到这一事实。我可以使用 python 套接字对 UDP 连接进行编程吗?如何区分传输层?

这个问题与python没有严格的联系,在c ++或其他任何东西中也欢迎解释。

4

3 回答 3

16

第二个参数确定套接字类型;socket.SOCK_DGRAM是UDP,socket.SOCK_STREAM是TCP套接字。这一切都假设您使用的是AF_INETAF_INET6套接字系列。

在继续之前,也许您想阅读Python 套接字编程 HOWTO以及其他套接字编程教程。UDP 和 TCP 套接字之间的差异相当大,但不同的编程语言之间的差异。

Python Wiki 上有关套接字的一些信息:

于 2013-11-01T13:23:41.587 回答
7

创建套接字的一般语法是:

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()

于 2013-11-01T14:28:30.900 回答
-1

主要区别在于 TCP 套接字是基于连接的。在连接到远程计算机上的另一个 TCP 套接字之前,您无法发送或接收任何内容。一旦连接,TCP 套接字只能向远程机器发送和接收。这意味着您的应用程序中的每个客户端都需要一个 TCP 套接字。UDP 不是基于连接的,您可以随时使用同一个套接字向任何人发送和接收。

于 2015-04-06T05:40:46.863 回答