標籤:print ref 通過 style 一個 而不是 recvfrom 方法 ipv6
python通訊端基本使用 socket
socket通常也稱作"通訊端",用於描述IP地址和連接埠,應用程式通常通過"通訊端"向網路發出請求或者應答網路請求,可以認為是一種電腦網路的資料結構,介面。它是網路編程的基礎
通訊端最早起源於Unix系統,一開始使用與一台電腦之間的進程間通訊,目前通訊端分為兩種,基於檔案型和基於網路型。其中一台主機的進程間是通過基於檔案的通訊端進行通訊(AF_UNIX或者AF_LOCAL)。而還有一種基於網路的,可用於不同主機之間的通訊(AF_INET和AP_INET6),AF_INET是用於IPV4,而AF_INET6是用於IPV6。
通訊端還分為連線導向的和不需連線的:
- 第一種是指TCP類型通訊端,在通訊前需要建立串連,這種串連是較為可靠的,使用的通訊端類型是SOCK_STREAM,TCP傳輸控制通訊協定,經常和IP協議一起使用,稱為TCP/IP協議
- 第二種主要指UDP類型的通訊端,無需串連就可以進行通訊,所有速度較快,但是可靠性不高。而且資料是整個發送,不會分成小塊。使用的通訊端類型是SOCK_DGRAM,UDP協議通常也與IP協議一起使用
python中的socket模組
使用通訊端的基本步驟:
| 函數名 |
描述 |
| 伺服器通訊端 |
|
| 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伺服器的基本步驟
- 建立通訊端並綁定地址
- 開始監聽串連
- 接收連結並發送資料
- 關閉通訊端
代碼如下:
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用戶端的基本步驟
- 建立通訊端,串連伺服器
- 收發資料
- 關閉通訊端
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服務端的基本步驟
- 建立通訊端並綁定地址
- 開始監聽串連
- 收發資料
- 關閉通訊端
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用戶端的基本步驟
- 建立通訊端
- 收發資料
- 關閉通訊端
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通訊端基本使用