在编写套接字时如何区分tcp/udp

2024-05-16 23:24:06 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是python套接字片段:

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

我的问题是:线路是否说明套接字连接将通过TCP/IP传输?到目前为止,我只是在编程TCP连接,使用上述行,但可能我不知道这个事实。我能用python套接字编程UDP连接吗?如何区分传输层?

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


Tags: importip语言stream编程socket线路事实
3条回答

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

在继续之前,您可能想阅读Python socket programming HOWTO,以及其他套接字编程教程。UDP和TCP套接字之间的差异相当大,但是这些差异可以跨编程语言进行转换。

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

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

socket(socket_family, socket_type, protocol=0)

我们可以使用AF_INET(对于IPv4)或AF_INET6(IPv6)作为第一个参数,即用于socket_family

socket_type是决定要创建的套接字是TCP还是UDP的参数。对于TCP套接字,它将是SOCK_STREAM;对于UDP,它将是SOCK_DGRAM(DGRAM-datagram)。最后,我们可以省略protocol参数,该参数将其设置为0的默认值。

对于TCP套接字,应该为服务器套接字使用bind()listen()accept()方法,为客户端套接字使用connect()connect_ex()方法。而对于UDP套接字,则不需要listen()accept()connect()方法(因为TCP套接字是面向连接的套接字,而UDP套接字是无连接的套接字)。

UDP可以使用特定的方法发送和接收数据包recvfrom()sendto(),而recv()send()则用于TCP。有关TCP和UDP各自方法的详细信息,请参阅documentation for socket。另外,Core Python Applications Programming by Wesley Chun是一本关于套接字编程的基础知识的更好的书。

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

~Muralidhar gundala

相关问题 更多 >