在python環(huán)境中已經(jīng)自帶了scoket庫,只需要簡單的幾行代碼便可以搭建scoket環(huán)境進(jìn)行通信。
1.首先需要導(dǎo)入scoket包
import scoket
2.然后初始化scoket實(shí)例,scoket方法中有三個(gè)參數(shù)(地址簇,類型,協(xié)議)
init = scoket.scoket()
參數(shù)一:地址簇
socket.AF_INET IPv4(默認(rèn))
socket.AF_INET6 IPv6
socket.AF_UNIX 只能夠用于單一的Unix系統(tǒng)進(jìn)程間通信
參數(shù)二:類型
socket.SOCK_STREAM 流式socket , for TCP (默認(rèn))
socket.SOCK_DGRAM 數(shù)據(jù)報(bào)式socket , for UDP
socket.SOCK_RAW 原始套接字,普通的套接字無法處理ICMP、IGMP等網(wǎng)絡(luò)報(bào)文,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4報(bào)文;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項(xiàng)由用戶構(gòu)造IP頭。
socket.SOCK_RDM 是一種可靠的UDP形式,即保證交付數(shù)據(jù)報(bào)但不保證順序。SOCK_RAM用來提供對(duì)原始協(xié)議的低級(jí)訪問,在需要執(zhí)行某些特殊操作時(shí)使用,如發(fā)送ICMP報(bào)文。SOCK_RAM通常僅限于高級(jí)用戶或管理員運(yùn)行的程序使用。
socket.SOCK_SEQPACKET 可靠的連續(xù)數(shù)據(jù)包服務(wù)
參數(shù)三:協(xié)議
0 (默認(rèn))與特定的地址家族相關(guān)的協(xié)議,如果是 0 ,則系統(tǒng)就會(huì)根據(jù)地址格式和套接類別,自動(dòng)選擇一個(gè)合適的協(xié)議
3.然后綁定ip地址和端口號(hào) 使用bind方法(默認(rèn)應(yīng)該都是自己的ip所以用localhost)
init.bind(('localhost',1234))
4.然后開始監(jiān)聽連接,監(jiān)聽方式是listen(非阻塞,需填寫最大鏈接個(gè)數(shù))
init.listen(5)
5.然后使用accept()方法阻塞鏈接等待信息傳遞,返回(套接字對(duì)象,ip)
init.accept()
6.使用recv()接收數(shù)據(jù),接收過來的數(shù)據(jù)是二進(jìn)制所以還需要轉(zhuǎn)義
data = conn.recv(1024)
print(data.decode())
7.然后建立客戶端,1,2步相同,使用connect((ip,端口)),方法進(jìn)行連接
init.connect(('localhost',1234))
8.發(fā)送信息send方法
init.send('hello'.encode('utf-8'))
此時(shí)scoket搭建完成,看一下測試情況