摘要:在任何類型的通信開始之前,網絡應用程序必須創建套接字。基于文件的套接字,家族名又名基于網絡的套接字,家族名在和后續的版本中,支持的套接字有,,,。中的網絡編程在中主要是用模塊來實現基于套接字的網絡通信。
python學習記錄--網絡編程1、套接字介紹
一臺機器上的不同進程之間進行通信可以利用隊列,管道等,但是不同機器之間的進程進行通信用隊列是不行的,解決這個問題就是網絡套接字。
套接字是計算機網絡數據結構,它體現了通信端點的概念。在任何類型的通信開始之前,網絡應用程序必須創建套接字。可以將它比作電話插孔,沒有它無法進行通信。
套接字最初是為同一主機上的應用程序所創建,使得主機上一個程序(進程)可以和主機上另外一個程序互相通信,也就是所謂的進程間通信。有兩種類型的套接字:基于文件和基于網絡的。
基于文件的套接字,家族名:AF_UNIX(又名:AF_LOCAL)
基于網絡的套接字,家族名:AF_INET
在python2.5和后續的版本中,支持的套接字有:AF_UNIX,AF_INET,AF_TICP,AF_NETLINK。python中的網絡編程主要是AF_INET。
1.1、套接字地址:主機+端口
如果一個套接字像一個電話插孔——允許通信的一些基礎設施,那么主機名和端口號就像區號和電話號碼的組合。
有效的端口號范圍為 0~65535(小于 1024 的端口號預留給了系統)。
1.2、面向連接和無連接的套接字
python中創建面向連接(TCP協議)的套接字必須使用SOCK_STREAM作為套接字類型,而創建無連接(UDP協議)的套接字必須使用SOCK_DGRAM作為套接字類型。
在python中主要是用socket模塊來實現基于套接字的網絡通信。
2.1、socket()模塊函數
使用socket.socket()函數創建套接字,一般語法格式如下:
import socket socket(socket_family,socket_type,protocol=0) #其中,socket_family就是AF_UNIX或者AF_INET等, #socker_type是SOCK_DGRAM或者SOCK_STREAM, #protocol通常省略,默認為0
創建一個TCP/IP套接字,可以用下面方式調用socket.socket()。
tcpSocket = socket.socket(socket.AF_INET,socket.SCOK_STREAM)
創建一個UDP/IP套接字,可以用下面方式調用socket.socket()。
udpSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
如果用"from socket import *"導入模塊的話,創建套接字就可以節省很多代碼,例如創建一個UDP/IP套接字。
from socket import * udpSock = socket(AF_INET,SOCK_DGRAM)
有了套接字對象,就可以使用套接字對象方法進行交互。
2.2、套接字方法
常見的套接字方法:
方法名 | 描述 | |
---|---|---|
s.send() | 發送TCP消息 | |
s.sendto() | 發送UDP消息 | |
s.recv() | 接收TCP消息 | |
s.recvfrom() | 接收UDP消息 | |
s.close() | 關閉套接字 | |
s.bind() | 將地址(主機名+端口號對)綁定到套接字上 |
3.1 UDP協議
UDP協議--是一個簡單的面向數據報的運輸層協議,它不提供可靠性,它把應用程序傳給IP層的數據報發出去,但是并不能保證它們能到達目的地。由于UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。
UDP是一種面向無連接的協議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能被保證的。
3.2 UDP特點
UDP是面向無連接的通訊協議,UDP數據包括目的端口號和源端口號信息,由于通訊不需要連接,所以可以實現廣播發送。 UDP傳輸數據時有大小限制,每個被傳輸的數據報必須限定在64KB之內。 UDP是一個不可靠的協議,發送方所發送的數據報并不一定以相同的次序到達接收方。
【適用情況】
UDP是面向消息的協議,通信時不需要建立連接,數據的傳輸自然是不可靠的,UDP一般用于多點通信和實時的數據業務,比如
語音廣播
視頻
TFTP(簡單文件傳送)
SNMP(簡單網絡管理協議)
RIP(路由信息協議,如報告股票市場,航空信息)
DNS(域名解釋)
注重速度流暢
UDP操作簡單,而且僅需要較少的監護,因此通常用于局域網高可靠性的分散系統中client/server應用程序。例如視頻會議系統,并不要求音頻視頻數據絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會更合理一些。
3.3 創建UDP服務器
創建UDP服務器的大體框架,由于UDP是面向無連接的,所以除了等待傳入的連接之外,幾乎不需要做其他工作。
from socket import * #創建服務器套接字 udpSocket = socket.socket(AF_INET,SOCK.DGRAM) #綁定服務器套接字 udpSocket.bind(port) #服務器無限循環,等待連接 while True: #接受客戶端傳入/發送數據 cs = udpSocket.recvfrom()/udpSocket.sendto(xxx) #關閉套接字 udpSocket.close()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42960.html
摘要:屬于前一種,而且日益被用于數學計算機器學習和多種數據科學應用。近來,由于擁有多個針對機器學習自然語言處理數據視覺化數據探索數據分析和數據挖掘的插件,豐富的數據科學生態體系得到了較大的發展,甚至有將數據科學社區化的趨勢。 譯者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,發布時間是10月29日。譯者一...
摘要:本文與大家分享一些編程語言的入門書籍,其中不乏經典。全書貫穿的主體是如何思考設計開發的方法,而具體的編程語言,只是提供一個具體場景方便介紹的媒介。入門入門容易理解而且讀起來幽默風趣,對于編程初學者和語言新手而言是理想的書籍。 本文與大家分享一些Python編程語言的入門書籍,其中不乏經典。我在這里分享的,大部分是這些書的英文版,如果有中文版的我也加上了。有關書籍的介紹,大部分截取自是官...
摘要:正好,最近又有幾位不同身份的初學者來咨詢,要我推薦幾本入門書籍,而我們薦書系列已經停更了兩個多月,所以,本期薦書就來推薦一些入門書籍吧。為了準備這期薦書,我專門搜集了本入門書籍,現在全部加入到了一份豆瓣豆列里,方便大家查看。 showImg(https://segmentfault.com/img/remote/1460000019299066?w=4790&h=3193); 本文原創...
摘要:楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,。本文來源知乎作者路人甲鏈接楚江數據提供網站數據采集和爬蟲軟件定制開發服務,服務范圍涵蓋社交網絡電子商務分類信息學術研究等。 楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,http://www.chujiangdata.com。 第一:Python爬蟲學習系列教程(來源于某博主:htt...
閱讀 1972·2021-11-25 09:43
閱讀 653·2021-10-11 10:58
閱讀 1730·2019-08-30 15:55
閱讀 1725·2019-08-30 13:13
閱讀 736·2019-08-29 17:01
閱讀 1840·2019-08-29 15:30
閱讀 789·2019-08-29 13:49
閱讀 2172·2019-08-29 12:13