python通訊端基本使用

來源:互聯網
上載者:User

標籤:print   ref   通過   style   一個   而不是   recvfrom   方法   ipv6   

 python通訊端基本使用 socket

socket通常也稱作"通訊端",用於描述IP地址和連接埠,應用程式通常通過"通訊端"向網路發出請求或者應答網路請求,可以認為是一種電腦網路的資料結構,介面。它是網路編程的基礎

通訊端最早起源於Unix系統,一開始使用與一台電腦之間的進程間通訊,目前通訊端分為兩種,基於檔案型和基於網路型。其中一台主機的進程間是通過基於檔案的通訊端進行通訊(AF_UNIX或者AF_LOCAL)。而還有一種基於網路的,可用於不同主機之間的通訊(AF_INET和AP_INET6),AF_INET是用於IPV4,而AF_INET6是用於IPV6。

通訊端還分為連線導向的和不需連線的:

  1. 第一種是指TCP類型通訊端,在通訊前需要建立串連,這種串連是較為可靠的,使用的通訊端類型是SOCK_STREAM,TCP傳輸控制通訊協定,經常和IP協議一起使用,稱為TCP/IP協議
  2. 第二種主要指UDP類型的通訊端,無需串連就可以進行通訊,所有速度較快,但是可靠性不高。而且資料是整個發送,不會分成小塊。使用的通訊端類型是SOCK_DGRAM,UDP協議通常也與IP協議一起使用
python中的socket模組

使用通訊端的基本步驟:

  • 建立通訊端

    socket(socket_family, socket_type, protocol)#socket_family 就是指通訊端家族可以是AF_VNIX或AF_INET#socket_type 就是指通訊端類型,即SOCK_STREAM或SOCK_DGRAM#protocol 是協議,預設為0,一般不填
  • 建立TCP/IP或者UDP/IP通訊端
    1. 建立TCP/IP通訊端

      import sockettcp = socket.socket(AF_INET, SOCK_STREAM)
    2. 建立UDP/IP通訊端

      import socketucp = socket.socket(AF_INET, SOCK_DGRAM)
  • 通訊端的常用函數

函數名 描述
伺服器通訊端  
bind((hostname, port)) 綁定地址(注意這裡是元祖)到通訊端
listen() 開啟TCP監聽
accept() 被動接受用戶端的串連(阻塞)
用戶端通訊端  
connect((hostname, port)) 初始化TCP伺服器串連
connect_ex() connect()的擴充版本,出錯時返回錯誤碼,而不是異常
公用的通訊端  
recv() 接收TCP的資料
send() 發送TCP資料
sendall() 發送完整的TCP資料
recvfrom() 接收UDP資料
sendto() 發生UDP資料,因為沒有串連,所以這裡要指定發送的目標
getpeername() 串連到當前通訊端的遠程地址
getsockname() 當前socket地址
getsockopt() 獲得通訊端的參數
setsockopt() 設定通訊端的參數
close() 關閉通訊端
面向模組的通訊端函數  
setblocking() 設定通訊端是否是阻塞模式
settimeout() 設定阻塞通訊端操作的逾時時間
gettimeout() 得到阻塞通訊端操作的逾時時間
面向檔案的通訊端函數  
fileno() 通訊端的檔案描述符
makefile() 建立一個與通訊端關聯的檔案對象
建立一個TCP伺服器和用戶端

建立TCP伺服器的基本步驟

  1. 建立通訊端並綁定地址
  2. 開始監聽串連
  3. 接收連結並發送資料
  4. 關閉通訊端

代碼如下:

import socketHOST = ‘‘   #Null 字元串標示127.0.0.1PORT = 3214sk = socket.socket() # 預設使用IPV4和TCPsk.bind((HOST,PORT))sk.listen(5)cli, addr = sk.accept() # 等待串連(阻塞式),在串連到來之前會阻塞在這裡print "Client Addr:", addrwhile True:    data = cli.recv(1024)    if not data:        break    print "Recieve Data:", data.decode(‘utf-8‘)    cli.send(data)cli.close()

建立TCP用戶端的基本步驟

  1. 建立通訊端,串連伺服器
  2. 收發資料
  3. 關閉通訊端
import socketHOST = ‘127.0.0.1‘PORT = 3214sk = socket.socket()try:    sk.connect((HOST, PORT))    data = "hello"    while data:        sk.sendall(data)        data = sk.recv(1024)        print "Recv data:", data        data = raw_input(‘Please input message\n‘)except socket.error as err:    print errfinally:    sk.close()

這裡的用戶端僅僅可以用來發送訊息給服務端,而服務端會接收訊息然後重新發送回用戶端

建立UDP伺服器和用戶端

建立UDP服務端的基本步驟

  1. 建立通訊端並綁定地址
  2. 開始監聽串連
  3. 收發資料
  4. 關閉通訊端
import socketHOST = ‘‘PORT = 3214sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)sk.bind((HOST, PORT))data = Truewhile data:    data, addr = sk.recvfrom(1024)    if data == b‘bye‘:        break    print "Recieve Data:", data.decode(‘utf-8‘)    sk.sendto(data, addr)sk.close()

建立UDP用戶端的基本步驟

  1. 建立通訊端
  2. 收發資料
  3. 關閉通訊端
import socketHOST = ‘127.0.0.1‘PORT = 3214sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)data = ‘hello‘while data:    sk.sendto(data, (HOST, PORT))    if data == "bye":        break    data, addr = sk.recvfrom(1024)    print "Recv Data:", data    data = raw_input(‘Please message:\n‘)sk.close()# tcpclient與udpclient區別# 建立socket時的區別# tcp需要連結服務端# 收發資料方法不同

這裡與TCP的區別就是不用建立串連,用戶端只是收發訊息,並不會與伺服器建立串連

python通訊端基本使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.