91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python進行簡單的網絡編程

發布時間:2020-09-24 10:03:57 來源:億速云 閱讀:144 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關Python進行簡單的網絡編程,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

OSI 模型介紹

應用層 -- 對接受的數據進行解釋、加密與解密、壓縮與解壓縮。

會話層 -- 通過傳輸層(端口號: 傳輸端口和接受端口) 建立數據傳輸的通路。

傳輸層 -- 定義了一些傳輸數據的協議和端口號(www端口80等),如:TCP。

網絡層 -- 主要將從下層接收到的數據進行IP地址(例:192.168.0.1)的封裝與解封裝。

數據鏈路層 -- 主要將從物理層接收的數據進行MAC地址的封裝與解封裝。

物理層 -- 主要定義物理設備標志,如往昔的接口類型,跟蹤傳輸介質的傳輸速率等。

TCP/IP協議

參考模型把所有的TCP/IP系列協議歸類到四個抽象層中。

應用層 -- TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

傳輸層 -- TCP,UDP

網絡層 -- IP,ICMP,OSPF,EIGRP,IGMP

數據鏈路層 -- SLIP,CSLIP,PPP,MTU

Socket 通信流程

Python進行簡單的網絡編程

相關方法及參數介紹

family=AF_INET:  服務器之間的通信
family=AF_UNIX: Unix 不同進程間通信
sk.bind(address)
#s.bind(address) 將套接字綁定到地址。address地址的格式取決于地址族。在AF_INET下,以元組(host,port)的形式表示地址。
sk.listen(backlog)
#開始監聽傳入連接。backlog指定在拒絕連接之前,可以掛起的最大連接數量。
#backlog等于5,表示內核已經接到了連接請求,但服務器還沒有調用accept進行處理的連接個數最大為5
#這個值不能無限大,因為要在內核中維護連接隊列
sk.setblocking(bool)
#是否阻塞(默認True),如果設置False,那么accept和recv時一旦無數據,則報錯。
sk.accept()
#接受連接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發送數據。address是連接客戶端的地址。
#接收TCP 客戶的連接(阻塞式)等待連接的到來
sk.connect(address)
#連接到address處的套接字。一般,address的格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤。
sk.connect_ex(address)
#同上,只不過會有返回值,連接成功時返回 0 ,連接失敗時候返回編碼,例如:10061
sk.close()
#關閉套接字
sk.recv(bufsize[,flag])
#接受套接字的數據。數據以字符串形式返回,bufsize指定最多可以接收的數量。flag提供有關消息的其他信息,通常可以忽略。
sk.send(string[,flag])
#將string中的數據發送到連接的套接字。返回值是要發送的字節數量,該數量可能小于string的字節大小。即:可能未將指定內容全部發送。
sk.sendall(string[,flag])
#將string中的數據發送到連接的套接字,但在返回之前會嘗試發送所有數據。成功返回None,失敗則拋出異常。
#內部通過遞歸調用send,將所有內容發送出去。

簡單的通信(client 端發送消息,server 端接收,一發一收)

# server 端
import socket
sk = socket.socket()
address=('127.0.0.1', 8000)
sk.bind(address)
sk.listen(3)
print('waiting....')
conn, addr = sk.accept()
while 1:
    data = conn.recv(1024)            # server 端通過 conn 接收和發送數據
    print('.....',str(data, 'utf8'))
    if not data: break
    inp = input('>>>')
    conn.send(bytes(inp,'utf8'))
sk.close()
# client 端
import socket
sk = socket.socket()
address = ('127.0.0.1', 8000)
sk.connect(address)
while True:
    inp = input('>>>')
    if inp == 'exit':
        break
    sk.send(bytes(inp, 'utf8'))        # client 端通過 sk 接收和發送數據
    data = sk.recv(1024)
    print(str(data,'utf8'))
sk.close()

簡單的通信(server 持續監聽)

# server 端
import socket
sk = socket.socket()
address=('127.0.0.1', 8000)
sk.bind(address)
sk.listen(3)
print('waiting....')
while 1:
    conn, addr = sk.accept()
    print(addr)
    while 1:
        try:
            data = conn.recv(1024)
        except Exception:
            break
        print('.....',str(data, 'utf8'))
        inp = input('>>>')
        conn.send(bytes(inp,'utf8'))
sk.close()
# client 端
import socket
sk = socket.socket()
address = ('127.0.0.1', 8000)
sk.connect(address)
while True:
    inp = input('>>>')
    if inp == 'exit':
        break
    sk.send(bytes(inp, 'utf8'))
    data = sk.recv(1024)
    print(str(data,'utf8'))
sk.close()

使用python執行命令

import subprocess
a = subprocess.Popen('dir', shell=True, stdout=subprocess.PIPE)
print(str(a.stdout.read(),'gbk'))   # windows 機器默認編碼為 gbk 所以輸出需要解碼為 gbk

bytes編碼 與 str編碼相互轉換

str   : unicode
bytes : 十六進制
s = 'hello,陳先生'
print(type(s))          # <class 'str'>
 
b = bytes(s, 'utf8')    # str 編碼成 bytes
print(type(b))          # <class 'bytes'>
print(b)                # b'hello,\xe9\x99\x88\xe5\x85\x88\xe7\x94\x9f
b2 = s.encode('utf8')   # str 編碼成 bytes
print(type(b2))         # <class 'bytes'>
print(b)                # b'hello,\xe9\x99\x88\xe5\x85\x88\xe7\x94\x9f
s1 = str(b2, 'utf8')    # bytes 解碼成 str 
print(s1)               # hello,陳先生
s2 = b2.decode('utf8')  # bytes 解碼成 str 
print(s2)               # hello,陳先生

以上就是Python進行簡單的網絡編程,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海南省| 济南市| 抚顺市| 榆林市| 老河口市| 宜城市| 汶上县| 莲花县| 莆田市| 科技| 上蔡县| 任丘市| 来凤县| 娄烦县| 赣榆县| 绿春县| 精河县| 平阳县| 临武县| 盐源县| 山丹县| 沙河市| 肇东市| 响水县| 恭城| 宣武区| 饶河县| 黎城县| 迁西县| 弥渡县| 肇庆市| 古田县| 盱眙县| 平凉市| 太湖县| 秦皇岛市| 泽库县| 康马县| 鄱阳县| 安新县| 广州市|