python中網路程式設計基礎
一:什麼是c\s架構
1.c\s即client\server 客戶端\服務端架構.
客戶端因特定的請求而聯絡伺服器併發送必要的資料等待伺服器的迴應最後完成請求
服務端:存在的意義就是等待客戶端的請求,伺服器無限的執行下去,並不斷的處理請求
2.硬體客戶端\伺服器架構也是c\S架構
客戶端\印表機,客戶端\儲存伺服器.......
3.B\S架構即瀏覽器(browser)\服務端>>>統一介面
二.網路通訊:
待續
三.socket網路程式設計
1.socket中文是指套接字,
1.套接字是計算機網路資料結構它體現的是通訊端點的概念,在任何型別的通訊之前網路應用程式必須建立套接字
可以將它比作電話插孔,沒有它將無法進行通訊
2.套接字起源於20世紀70年代加利福尼亞大學伯克利版本UNIX的一部分
套接字最初是為同一主機上的應用程式所建立,使得主機上執行的一個程式與另一個執行的程式進行通訊,這就是
所謂的程序間的通訊,
3.有兩種套接字,
一基於檔案的.
AF_UNIX地址家族,又稱協議家族
二有面向網路的
AF_INET指因特網,AF_INET6
三socket地址:
1.主機-埠對 ,用於定位服務端主機與應用程式沒有它就無法找到服務端的IP,和服務端的應用程式
例子:一個套接字就像一個電話機孔--允許通訊一些基礎設施,主機與埠號就像區號與電話號碼的組合
2.有效埠號:65535(小於1024的埠預留給了系統)
3.python中套接字socket模組的應用'
在socket模組中socket()函式,用於建立socket物件,這些方法都能實現套接字的網路通訊
在socket類中socket函式預設是TCP/IP面向連線的AF_INET,型別是SOCK_STREAM資料流的形式.
udpsocket=socket.socket(socket.AF_INET,type=socket.SOCK_STREAM)
在socket類中socket函式預設是UDP/IP面向連線的AF_INET,型別是SOCK_DGRAM資料包的形式.
udpsocket=socket.socket(socket.AF_INET,type=socket.SOCK_DGRAM)
4.socket案例:
服務端
import socket #例項化socket物件 server = socket.socket() #建立了一部手機 ip_port = ('192.168.15.46',8001) #買個電話卡 #繫結IP地址和埠 server.bind(ip_port) #插卡 #監聽, server.listen() #開機 #等待客戶端連線 print(111111) conn,addr = server.accept() #等別人的電話,阻塞 print(222222) print(conn) print(addr) #傳送訊息 # conn.send(b'leihao') #必須是bytes型別的資料 server_msg = input('服務端說>>>>') conn.send(server_msg.encode('utf-8')) #必須是bytes型別的資料 #接受訊息 from_client_msg = conn.recv(1024) #1024,一次效能夠接受的訊息大小1024B print('來自客戶端的訊息',from_client_msg) conn.send(b'gun') #掛電話,關閉通道 conn.close() #關機,關閉socket server.close()
客戶端
import socket client = socket.socket() # #服務端的ip地址和埠 server_ip_port = ('192.168.15.46',8001) #連線服務端的應用程式 client.connect(server_ip_port) print('ssss') from_server_msg1 = client.recv(1024) #阻塞 print('mmmm') print('服務端第一條訊息:',from_server_msg1.decode('utf-8')) client.send(b'yuema') from_server_msg = client.recv(1024) print('來自服務端的訊息:',from_server_msg) client.close()
加強版的服務端
import socket #例項化socket物件 server = socket.socket() #建立了一部手機 ip_port = ('192.168.15.46',8001) #買個電話卡 #繫結IP地址和埠 server.bind(ip_port) #插卡 #監聽, server.listen() #開機 #等待客戶端連線 print(111111) conn,addr = server.accept() #等別人的電話,阻塞 print(222222) print(conn) print(addr) #傳送訊息 # conn.send(b'leihao') #必須是bytes型別的資料 while 1: server_msg = input('王斌>>>>') conn.send(server_msg.encode('utf-8')) #必須是bytes型別的資料 #接受訊息 from_client_msg = conn.recv(1024) #1024,一次效能夠接受的訊息大小1024B print('來自俊豪妹的訊息',from_client_msg.decode('utf-8')) # conn.send(b'gun') #掛電話,關閉通道 conn.close() #關機,關閉socket server.close()
加強版客戶端
import socket client = socket.socket() # #服務端的ip地址和埠 server_ip_port = ('192.168.15.46',8001) #連線服務端的應用程式 client.connect(server_ip_port) while 1: from_server_msg1 = client.recv(1024) #阻塞 print('來自王斌訊息:',from_server_msg1.decode('utf-8')) client_msg = input('俊豪妹>>>') client.send(client_msg.encode('utf-8')) from_server_msg = client.recv(1024) print('來自服務端的訊息:',from_server_msg) client.close()
四.面向連線的套接字,與無連線的套接字
1面向連線的套接字必須建立連線,實現這種連線型別的協議是傳輸控制協議即TCP協議
面向連線的優點:提供序列化,可靠的和不重複的資料互動
缺點,傳輸效率低
2無連線套接字即是實現這種連線型別的協議是使用者資料報協議即UDP
優點:傳輸效率高
缺點無法保證資料的可靠性