簡體   English   中英

編程套接字時如何區分tcp / udp

[英]how to differentiate tcp/udp when programming sockets

以下是一個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_INETAF_INET6套接字系列。

在繼續之前,也許你想去閱讀Python套接字編程HOWTO ,以及其他套接字編程教程。 UDP和TCP套接字之間的差異相當大,但差異在編程語言之間轉換。

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

創建套接字的一般語法是:

socket(socket_family, socket_type, protocol=0)

我們可以使用AF_INET (對於IPv4)或AF_INET6 (IPv6)作為第一個參數i。,e用於socket_family

socket_type是確定要創建的套接字是TCP還是UDP的參數。 對於TCP套接字,它將是SOCK_STREAM ,對於UDP,它將是SOCK_DGRAM (DGRAM - 數據報)。 最后,我們可以省略protocol參數,將其設置為默認值0

對於TCP套接字,您應該使用服務器套接字的bind()listen()accept()方法以及客戶端套接字的connect()connect_ex() 而對於UDP套接字,您不需要listen()accept()connect()方法(因為TCP套接字是面向連接的套接字,而UDP套接字是連接較少的套接字)。

有一些特定的方法可用於UDP分別發送和接收數據包recvfrom()sendto()recv()send()分別用於TCP。 有關TCP和UDP的相應方法的詳細信息,請參閱此文檔以獲取套接字 此外, Wesley Chun的核心Python應用程序編程是一本關於套接字編程的一些非常基礎的更好的書。

主要區別在於TCP套接字是基於連接的。 在連接到遠程計算機上的另一個TCP套接字之前,您無法發送或接收任何內容。 連接后,TCP套接字只能發送到遠程計算機或從遠程計算機接收。 這意味着您的應用程序中的每個客戶端都需要一個TCP套接字。 UDP不是基於連接的,您可以使用相同的套接字隨時向/從任何人發送和接收。

~Muralidhar gundala

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM