python網路編程Ⅰ@遠遠子
1.網路編程
網路是一種把雙方或者多方連接在一起,并進行資料傳遞的工具,
網路編程能夠使讓不同電腦上的軟體進行資料傳遞,即行程之間的通信,
2.ip地址
1.什么是ip地址
用來標記網路上的一臺電腦,不允許重復,
網路拓撲:電腦-交換機-路由器,

2.ip地址的分類
ipv4
ip version 4:常用的ip版本,共4組數,用點隔開,每組數范圍是0-255,
ipv6
ip version 6:每個國家地區都有自己的ip區域,以此判斷訪問的是哪個國家/地區的網站,
ipv4被瓜分完了,以此產生了ipv6,
注:ipv1、ipv2、ipv3、ipv5是實驗版本,
公有ip
私有ip
本地局域網上的ip,多個設備可以使用同一個ip,
3.Linux命令(ping,ifconfig)
查看網卡資訊
1.方法一 -圖形化界面查看
我的電腦-網路-網路和共享中心-更改配接器設定-雙擊WLAN查看WLAN狀態-詳細資訊,

2.方法二-使用windows命令
找到cmd(windows鍵+R)-ipconfig,

4.埠
1.什么是埠
埠:一種特殊的通道,將ip地址看作學校,將埠看作教室的門,埠號即門牌號,
根據ip地址:判斷給網路下的哪一個電腦/設備,
根據埠號:判斷給該設備中的哪一個程式,

2.埠的分類
行程:運行起來的程式,
知名埠(Well Known Ports)
大家默認使用的埠,如80埠分配給http服務,21埠分配給ftp服務,
小于1024的為知名埠,大于1024的隨便用,
動態埠(Dynamic Ports)
動態埠范圍1024—65535,
5.Socket(套接字/插口)
socket(套接字)是行程間通信的一種方式,能實作不同主機間的行程通信,所有網路程式都使用到了socket,
udp使用流程
1.創建套接字 (并系結埠)
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
local_addr=("",port1)
udp_socket.bind(local_addr)
2.使用套接字收發資料
udp_socket.sendto(“資料”.encode(“utf-8”),(“ip”,port2))
recv_data=udp_socket.recvfrom(1024)
3.關閉套接字
udp_socket.close()
1.創建一個socket
import socket
socket.socket(Address Family,Type)
Address Family:可以選擇AF_INET(用于Internet行程間通信,實際作業中常用)或者AF_UNIX(用于同一臺機器行程間通信) ,
Type:指出套接字型別,SOCK_STREAM(tcp協議),SOCK_DGRAM(udp協議),
創建一個tcp socket(tcp套接字)
import socket
#創建一個tcp的套接字物件s
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #ipv4,tcp協議
s.close #關閉套接字
創建一個udp socket(udp套接字)
import socket
#創建一個udp的套接字物件s
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.close #關閉套接字
2.Demo-udp
PS:可使用Sublime Text編譯器,支持多種語言,
Demo1-udp發送資料
import socket
def main():
#創建一個udp套接字s
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #udp
#可以使用套接字收發資料
dest_addr=("192.168.44.1",8080) #元組,用來存盤ip地址和埠號port
s.sendto(b"hahahahaha",dest_addr) #發送資料 引數:發送的內容,ip地址和埠號port(b將字串型別轉換成位元組型別)
#關閉套接字
s.close()
if __name__=="__main__":
main()
關于“if name==‘main’:”的使用,參考以下鏈接
Python中“if name==‘main’:”理解與總結
測驗使用網路除錯助手,下載鏈接網路除錯助手NetAssist 下載鏈接

Demo2-udp接收一次資料
udp系結埠問題:給某個套接字設定固定埠號
import socket
def main():
#創建一個udp套接字s
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #udp
#可以使用套接字收發資料
#dest_addr=("192.168.44.1",8082) #元組,用來存盤ip地址和埠號port
local_addr=("",60777) #只有一個ip,可以第一個引數直接寫一個空的字串
s.bind(local_addr) #系結
recv_data=s.recvfrom(1024) #引數 接收的最大位元組數 recv_data是一個元組,資料+ip+埠
recv_conment=recv_data[0]
send_addr=recv_data[1]
print(recv_data)
print("%s:%s"%(str(send_addr),recv_conment.decode("utf-8")))
#關閉套接字
s.close()
if __name__=="__main__":
main()

運行結果如下:

發送資料的流程
創建套接字
發送資料
關閉套接字
接收資料的流程
創建套接字
系結本地自己的ip和埠
接收資料
關閉套接字
Demo3-udp回圈接收資料
通過while True實作:
import socket
def main():
#創建一個udp套接字s
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #udp
#可以使用套接字收發資料
#dest_addr=("192.168.44.1",8082) #元組,用來存盤ip地址和埠號port
local_addr=("",60777) #只有一個ip,可以第一個引數直接寫一個空的字串
s.bind(local_addr) #系結
#*************************************************************
while True:
recv_data=s.recvfrom(1024) #引數 接收的最大位元組數 recv_data是一個元組,資料+ip+埠
recv_conment=recv_data[0]
send_addr=recv_data[1]
print(recv_data)
print("%s:%s"%(str(send_addr),recv_conment.decode("gbk")))
#*************************************************************
#關閉套接字
s.close()
if __name__=="__main__":
main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/297797.html
標籤:其他
上一篇:結構體大小計算
