python基礎——socket

來源:互聯網
上載者:User

標籤:關心   lan   file   miss   起源   lap   tail   mission   虛擬機器   

一.socket概念1.理解socket

絡上的兩個程式通過一個雙向的通訊串連實現資料的交換,這個串連的一端稱為一個socket。

建立網路通訊串連至少要一對連接埠號碼(socket)。socket本質是編程介面(API),對TCP/IP的封裝,TCP/IP也要提供可

供程式員做網路開發所用的介面,這就是Socket編程介面;HTTP是轎車,提供了封裝或者顯示資料的具體形式;

Socket是發動機,提供了網路通訊的能力。

Socket的英文原義是“孔”或“插座”。作為BSD UNIX的進程通訊機制,取後一種意思。通常也稱作"通訊端",用於描述

IP地址和連接埠,是一個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同電腦之間的通訊。在Internet上的主機一般運

行了多個服務軟體,同時提供幾種服務。每種服務都開啟一個Socket,並綁定到一個連接埠上,不同的連接埠對應於不同

的服務。Socket正如其英文原義那樣,像一個多孔插座。一台主機猶如布滿各種插座的房間,每個插座有一個編號,

有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,

就可以得到不同的服務。

Socket是應用程式層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,

它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。

2.socket概念socket層

理解socket

Socket是應用程式層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協

議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。

3.通訊端(socket)的發展史

通訊端起源於 20 世紀 70 年代加利福尼亞大學伯克利分校版本的 Unix,即人們所說的 BSD Unix。 因此,有時人們也把通訊端稱為“伯克利通訊端

”或“BSD 通訊端”。一開始,通訊端被設計用在同 一台主機上多個應用程式之間的通訊。這也被稱進程間通訊,或 IPC。通訊端有兩種(或者稱為

有兩個種族),分別是基於檔案型的和基於網路型的。 

基於檔案類型的通訊端家族

通訊端家族的名字:AF_UNIX

unix一切皆檔案,基於檔案的通訊端調用的就是底層的檔案系統來取資料,兩個通訊端進程運行在同一機器,可以通過訪問同一個檔案系統間接完成通訊

基於網路類型的通訊端家族

通訊端家族的名字:AF_INET

(還有AF_INET6被用於ipv6,還有一些其他的地址家族,不過,他們要麼是只用於某個平台,要麼就是已經被廢棄,或者是很少被使用,或者是根本沒有

實現,所有地址家族中,AF_INET是使用最廣泛的一個,python支援很多種地址家族,但是由於我們只關心網路編程,所以大部分時候我麼只使用AF_INET)

4.tcp協議和udp協議

TCP(Transmission Control Protocol)可靠的、連線導向的協議(eg:打電話)、傳輸效率低全雙工系統通訊(發送緩衝&接收緩衝)、面向位元組流。使用TCP

的應用:Web瀏覽器;電子郵件、檔案傳輸程式。

UDP(User Datagram Protocol)不可靠的、不需連線的服務,傳輸效率高(發送前時延小),一對一、一對多、多對一、多對多、面向報文,盡最大努力服

務,無擁塞控制。使用UDP的應用:網域名稱系統 (DNS);視頻流;IP語音(VoIP)。

我知道說這些你們也不懂,直接。

二.通訊端(socket)初使用1.基於TCP協議的socket

tcp是基於連結的,必須先啟動服務端,然後再啟動用戶端去連結服務端

server端:

 1 import socket 2 sk = socket.socket() 3 sk.bind((‘127.0.0.1‘,8080))  #把地址綁定到通訊端 4 sk.listen()          #監聽連結 5 conn,addr = sk.accept() #接受用戶端連結 6 ret = conn.recv(1024)  #接收用戶端資訊 7 print(ret)       #列印用戶端資訊 8 conn.send(b‘hi‘)        #向用戶端發送資訊 9 conn.close()       #關閉用戶端通訊端10 sk.close()        #關閉伺服器通訊端(可選)
server端

client端

1 import socket2 sk = socket.socket()           # 建立客戶通訊端3 sk.connect((‘127.0.0.1‘,8898))    # 嘗試串連伺服器4 sk.send(b‘hello!‘)5 ret = sk.recv(1024)         # 對話(發送/接收)6 print(ret)7 sk.close()            # 關閉客戶通訊端
client端

在重啟服務端時可能會遇到以下問題:

解決方案:

 1 #加入一條socket配置,重用ip和連接埠 2 import socket 3 from socket import SOL_SOCKET,SO_REUSEADDR 4 sk = socket.socket() 5 sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #就是它,在bind前加 6 sk.bind((‘127.0.0.1‘,8080))  #把地址綁定到通訊端 7 sk.listen()          #監聽連結 8 conn,addr = sk.accept() #接受用戶端連結 9 ret = conn.recv(1024)   #接收用戶端資訊10 print(ret)              #列印用戶端資訊11 conn.send(b‘hi‘)        #向用戶端發送資訊12 conn.close()       #關閉用戶端通訊端13 sk.close()        #關閉伺服器通訊端(可選)
View Code2.基於UDP協議的socket

server端:

1 import socket2 udp_sk = socket.socket(type=socket.SOCK_DGRAM)   #建立一個伺服器的通訊端3 udp_sk.bind((‘127.0.0.1‘,9000))        #綁定伺服器通訊端4 msg,addr = udp_sk.recvfrom(1024)5 print(msg)6 udp_sk.sendto(b‘hi‘,addr)                 # 對話(接收與發送)7 udp_sk.close()                         # 關閉伺服器通訊端
server端

client端:

1 import socket2 ip_port=(‘127.0.0.1‘,9000)3 udp_sk=socket.socket(type=socket.SOCK_DGRAM)4 udp_sk.sendto(b‘hello‘,ip_port)5 back_msg,addr=udp_sk.recvfrom(1024)6 print(back_msg.decode(‘utf-8‘),addr)
client端3.socket參數的詳解
socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)
建立socket對象的參數說明:
family 地址系列應為AF_INET(預設值),AF_INET6,AF_UNIX,AF_CAN或AF_RDS。
(AF_UNIX 域實際上是使用本地 socket 檔案來通訊)
type 通訊端類型應為SOCK_STREAM(預設值),SOCK_DGRAM,SOCK_RAW或其他SOCK_常量之一。
SOCK_STREAM 是基於TCP的,有保障的(即能保證資料正確傳送到對方)連線導向的SOCKET,多用於資料傳送。 
SOCK_DGRAM 是基於UDP的,無保障的面向訊息的socket,多用於在網路上發廣播資訊。
proto 協議號通常為零,可以省略,或者在地址族為AF_CAN的情況下,協議應為CAN_RAW或CAN_BCM之一。
fileno 如果指定了fileno,則其他參數將被忽略,導致帶有指定檔案描述符的通訊端返回。
與socket.fromfd()不同,fileno將返回相同的通訊端,而不是重複的。
這可能有助於使用socket.close()關閉一個獨立的插座。

 

 

 

python基礎——socket

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.