新聞中心
OSI 模型介紹

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站設計、網站制作、外貿營銷網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的城廂網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
應用層 -- 對接受的數據進行解釋、加密與解密、壓縮與解壓縮。
會話層 -- 通過傳輸層(端口號: 傳輸端口和接受端口) 建立數據傳輸的通路。
傳輸層 -- 定義了一些傳輸數據的協(xié)議和端口號(www端口80等),如:TCP。
網絡層 -- 主要將從下層接收到的數據進行IP地址(例:192.168.0.1)的封裝與解封裝。
數據鏈路層 -- 主要將從物理層接收的數據進行MAC地址的封裝與解封裝。
物理層 -- 主要定義物理設備標志,如往昔的接口類型,跟蹤傳輸介質的傳輸速率等。
TCP/IP協(xié)議
參考模型把所有的TCP/IP系列協(xié)議歸類到四個抽象層中。
應用層 -- TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
傳輸層 -- TCP,UDP
網絡層 -- IP,ICMP,OSPF,EIGRP,IGMP
數據鏈路層 -- SLIP,CSLIP,PPP,MTU
Socket 通信流程
相關方法及參數介紹
family=AF_INET: 服務器之間的通信 family=AF_UNIX: Unix 不同進程間通信 sk.bind(address) #s.bind(address) 將套接字綁定到地址。address地址的格式取決于地址族。在AF_INET下,以元組(host,port)的形式表示地址。 sk.listen(backlog) #開始監(jiān)聽傳入連接。backlog指定在拒絕連接之前,可以掛起的連接數量。 #backlog等于5,表示內核已經接到了連接請求,但服務器還沒有調用accept進行處理的連接個數為5 #這個值不能大,因為要在內核中維護連接隊列 sk.setblocking(bool) #是否阻塞(默認True),如果設置False,那么accept和recv時一旦無數據,則報錯。 sk.accept() #接受連接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發(fā)送數據。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中的數據發(fā)送到連接的套接字。返回值是要發(fā)送的字節(jié)數量,該數量可能小于string的字節(jié)大小。即:可能未將指定內容全部發(fā)送。 sk.sendall(string[,flag]) #將string中的數據發(fā)送到連接的套接字,但在返回之前會嘗試發(fā)送所有數據。成功返回None,失敗則拋出異常。 #內部通過遞歸調用send,將所有內容發(fā)送出去。
簡單的通信(client 端發(fā)送消息,server 端接收,一發(fā)一收)
相關推薦:《python視頻教程》
# 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 接收和發(fā)送數據
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 接收和發(fā)送數據
data = sk.recv(1024)
print(str(data,'utf8'))
sk.close()簡單的通信(server 持續(xù)監(jiān)聽)
# 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執(zhí)行命令
import subprocess
a = subprocess.Popen('dir', shell=True, stdout=subprocess.PIPE)
print(str(a.stdout.read(),'gbk')) # windows 機器默認編碼為 gbk 所以輸出需要解碼為 gbkbytes編碼 與 str編碼相互轉換
str : unicode bytes : 十六進制 s = 'hello,陳先生' print(type(s)) #b = bytes(s, 'utf8') # str 編碼成 bytes print(type(b)) # print(b) # b'hello,\xe9\x99\x88\xe5\x85\x88\xe7\x94\x9f b2 = s.encode('utf8') # str 編碼成 bytes print(type(b2)) # 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,陳先生
網站題目:創(chuàng)新互聯(lián)Python教程:Python之簡單的網絡編程
當前路徑:http://m.5511xx.com/article/cddosgi.html


咨詢
建站咨詢
