手机上python编程工具3和3h有区别吗_Python 高级 3
1.編輯器vim
目標
能夠說出vim三種工作模式
能夠寫出vim復制、剪切、粘貼、選中多行命令
yy,dd,p,數字+V
能夠寫出查找、替換命令
:/要查找的內容,n下一個,N上一個
:%s/要替換的內容/新內容/g
:10-20s/要替換的內容/新內容
<1>vim簡
介
vim是一個類似于Vi的著名的功能強大、高度可定制的文本編輯器
vim有三種基本工作模式:
命令模式
編輯模式
末行模式。
<2>命令行模式
任何時候,不管用戶處于何種模式,只要按一下ESC鍵,即可使Vi進入命令模式;我們在shell環境(提示符為$)下輸入啟動Vi命令,進入編輯器時,也是處于該模式下。在該模式下,用戶可以輸入各種合法的Vi命令,用于管理自己的文檔。此時從鍵盤上輸入的任何字符都被當做編輯命令來解釋,若輸入的字符是合法的Vi命令,則Vi在接受用戶命令之后完成相應的動作。但需注意的是,所輸入的命令并不在屏幕上顯示出來。若輸入的字符不是Vi的合法命令,Vi會響鈴報警。
<3>編輯模式
在命令模式下輸入插入命令i、附加命令a 、打開命令o、修改命令c、取代命令r或替換命令s都可以進入文本輸入模式。在該模式下,用戶輸入的任何字符都被Vi當做文件內容保存起來,并將其顯示在屏幕上。在文本輸入過程中,若想回到命令模式下,按鍵ESC即可。
<4>末行模式
在命令模式下,用戶按“:”鍵即可進入末行模式下,此時Vi會在顯示窗口的最后一行(通常也是屏幕的最后一行)顯示一個“:”作為末行模式的提示符,等待用戶輸入命令。多數文件管理命令都是在此模式下執行的(如把編輯緩沖區的內容寫到文件中等)。末行命令執行完后,Vi自動回到命令模式。例如:
:sp newfile
則分出一個窗口編輯newfile文件。如果要從命令模式轉換到編輯模式,可以鍵入命令a或者i;如果需要從文本模式返回,則按Esc鍵即可。在命令模式下輸入“:”即可切換到末行模式,然后輸入命令。
<5>vim基礎操作
vim是從 vi 發展出來的一個文本編輯器 。代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富
進入插入模式:
i: 插入光標前一個字符
I: 插入行首
a: 插入光標后一個字符
A: 插入行未
o: 向下新開一行,插入行首
O: 向上新開一行,插入行首
進入命令模式:
ESC:從插入模式或末行模式進入命令模式
移動光標:
h: 左移
j: 下移
k: 上移
l: 右移
M: 光標移動到中間行
L: 光標移動到屏幕最后一行行首
G: 移動到指定行,行號 -G
w: 向后一次移動一個字
b: 向前一次移動一個字
Ctr+d: 向下翻半屏
Ctr+u: 向上翻半屏
Ctr+f: 向下翻一屏
Ctr+b: 向上翻一屏
gg: 光標移動文件開頭
G: 光標移動到文件末尾
刪除命令:
x: 刪除光標后一個字符,相當于 Del
X: 刪除光標前一個字符,相當于 Backspace
dd: 刪除光標所在行,n dd 刪除指定的行數。也是剪切的意思,配合p粘貼使用,如果沒有粘貼就是刪除。
D: 刪除光標后本行所有內容,包含光標所在字符
d0: 刪除光標前本行所有內容,不包含光標所在字符
dw: 刪除光標開始位置的字,包含光標所在字符
撤銷命令:
u: 一步一步撤銷
Ctr-r: 反撤銷
重復命令:
.: 重復上一次操作的命令
文本行移動:
>>: 文本行右移
<<: 文本行左移
復制粘貼:
yy: 復制當前行,n yy 復制 n 行
p: 在光標所在位置向下新開辟一行,粘貼
可視模式:
v: 按字符移動,選中文本
V: 按行移動,選中文本可視模式可以配合 d, y, >>, << 實現對文本塊的刪除,復制,左右移動
替換操作:
r: 替換當前字符
R: 替換當前行光標后的字符
查找命令:
:/查找內容
n: 下一個
N: 上一個
替換命令:
把abc全部替換成123
末行模式下,將當前文件中的所有abc替換成123
:%s/abc/123/g
末行模式下,將第一行至第10行之間的abc替換成123
:1, 10s/abc/123/g
因為是范圍內替換,最后可以不用加g
小結:
%表示整個文件, 1, 10表示1到10行范圍內
s表示替換
g表示全局
<6>設置vim顯示行號
1 >臨時顯示行號
如果只是臨時顯示vim的行號,只須按ESC鍵退出編輯內容模式,輸入“:set number”后按回車鍵,就可以顯示行號了。行號顯示只是暫時的,退出vim后再次打開vim就不顯示行號了。
2>永久顯示行號
如果想讓vim永久顯示行號,則需要修改vim配置文件vimrc。如果沒有此文件可以創建一個。在啟動vim時,當前用戶根目錄下的vimrc文件會被自動讀取,因此一般在當前用戶的根目錄下創建vimrc文件,即使用下面的命令:
■ vim ~/.vimrc
■ 在打開的vimrc文件中最后一行輸入:set number ,然后保存退出。再次用vim打開文件時,就會顯示行號了。
2.Linux 命令總結
1. 啟動終端: ctr+alt+t
2. 終端字體放大: ctr+shift+'+',終端字體縮小: ctr+'-'
3. ls: 查看當前目錄下的文件信息
4. pwd: 查看目錄所在的路徑
5. touch: 創建文件
6. mkdir: 創建文件夾
7. rmdir: 刪除文件夾,提示:只能是空文件夾
8. rm: 默認刪除的是文件,如果刪除文件夾需要加上-r選項,-r:以遞歸的方式把文件夾下的所有文件信息刪除掉
9. cd:切換目錄
9.1 cd 目錄名 : 切換到指定目錄
9.2 cd .: 切換到當前目錄
9.3 cd ..: 切換到上一級目錄
9.4 cd ~: 切換到當前用戶的目錄
9.5 cd: 等價與cd ~ 切換到當前用戶的目錄
9.6 cd -: 切換到上一次目錄
10. 絕對路徑: 從根目錄算起的路徑叫做絕對路徑,比如: /home/python
11. 相對路徑: 從當前目錄算起的路徑叫做相對路徑, 比如: ./AAA ../BBB
12. 路徑的使用總結: 如果離當前目錄近使用相對路徑,如果離根目錄近使用絕對路徑,如果進入的是中間目錄建議使用絕對路徑
13. 自動補全: 兩次tab鍵
14. cp: 拷貝
14.1 cp 文件名 路徑: 把文件拷貝到指定路徑
14.2 cp 路徑/文件名 路徑: 把指定路徑的文件拷貝到指定路徑
14.3 cp 文件名 路徑/新的文件名 : 先把文件拷貝到指定目錄然后再重命名
14.4 cp 文件夾 路徑 -r: 拷貝文件夾 -r:以遞歸的方式把文件夾下的所有文件拷貝過去
15. mv: 移動(剪切)
15.1 mv 文件名 路徑: 把文件移動到指定路徑
15.2 mv 路徑/文件名 路徑: 把指定路徑的文件移動到指定路徑
15.3 mv 文件名 新的文件名: 重命名
15.4 mv 文件夾 路徑: 把文件夾移動到指定目錄,不需要加上-r
16. tree: 以目錄樹方式顯示當前文件夾信息
16.1 tree / : 以目錄樹方式顯示指定路徑的文件信息
17. 命令的格式
17.1 命令名 選項 參數, 提示:有些命令選項可以放到參數的后面,但是:scp 選項必須要放到命令名的后面
18. ls 選項
18.1 -l: 以列表的方式取顯示
18.2 -a: 顯示隱藏文件
18.3 -h: 顯示文件大小的單位
19. mkdir 選項
19.1 -p: 把依賴文件夾提取創建好,比如: mkdir 123/456/789 -p
20. rm選項
20.1 -r: 以遞歸的方式刪除文件夾里面的所有內容
20.2 -i: 顯示刪除的時候提醒信息
20.3 -v: 顯示刪除后的描述信息
20.4 -d: 刪除空目錄
20.5 -f: 如果文件或者目錄存在則刪除,否則就不刪除也不會報錯
21. cp選項
21.1 -i:拷貝文件的時候如果指定目錄有該文件需要顯示提醒信息
21.2 -v:顯示拷貝文件的路徑描述
21.3 -r:以遞歸的方式拷貝文件夾里面的所有內容
22. mv選項
22.1 -i:移動文件顯示提醒信息
22.2 -v:顯示移動后的路徑描述
23. 重定向(>,>>): 在終端顯示的內容信息重寫規定方向,保存到指定文件里面,以后查看數據是文件查看就可以了
23.1 > :如果文件不存在,那么先創建,否則會先把原有文件的數據清空然后再寫入
23.2 >> : 在原有數據的基礎上進行追加
23.3 總結: ls, cat, tree都可以使用重定向
24. gedit:文本編輯工具,可讀可編輯
25. cat: 內容在終端顯示,不能進行編輯,提示:適合查看小型文件,大型文件使用分屏方式顯示(more)
26. more:分屏顯示
26.1 f:表示下一頁
26.2 空格:表示下一頁
26.3 回車: 表示下一行
26.4 b:表示上一頁
26.5 q:退出
27. 文件合并 cat 1.txt 2.txt > 3.txt
28. 管道: 可以理解成是一個容器,存放在終端顯示的內容
28.1 總結: ls /bin | more , cat, tree, ls都是可以結合管道使用完成分屏顯示的
29. 鏈接
29.1 軟連接:可以理解成快捷方式,把原文件刪除掉通過軟鏈接無法打文件的數據, 提示:創建軟連接不會對硬鏈接數加1
29.2 硬連接: 同一個數據有多個文件名在使用,某個文件刪除掉,還可以通過其它文件名訪問這個文件的數據, 提示:創建硬鏈接硬鏈接數會加1
29.3 提示:如果創建的軟鏈接沒有和原文件在同一個目錄里面,那么需要使用絕對路徑創建軟連接
30. grep: 根據指定的內容在文件中進行查找
30.1 grep "a" 8.txt : 根據指定內容在文件中進行查找
30.2 -n:行號, -i:忽略大小寫 -v: 取反
30.3 總結: ^,$ [], . 支持的正則表達式
31. find:在指定目錄查找對應的文件
31.1 find . -name ".txt": 在當前目錄查找后綴是.txt的文件, -name根據文件名查找
31.2 find . -perm 666: 在當前目錄查找文件權限是可讀可寫的, -perm根據權限查找
31.3 總結: ? [] 支持的通配符
32. ls:支持的通配符: *,? , [], []:表示匹配任意列舉中的一個字符
33. 通配符: ? * [],起到了模糊查詢的作用
34. tar: 打包、壓縮、解包、解壓縮
34.1 打包 tar -cvf test.tar *.txt, -c: 表示要打包, -v:顯示文件打到包里面 -f:表示文檔名稱,提示-f必須放到所有選項的后面
34.2 解包 tar -xvf test.tar , -x:表示解包
34.3 打包及壓縮合并的命令:tar -zcvf test.tar.gz *.txt
34.4 解壓縮及解包合并的命令:tar -zxvf test.tar.gz ->得到對應的文件
34.5 指定解壓縮的路徑 tar -zxvf test.tar.gz -C ../BBB, -C:指定解壓縮后的路徑
34.6 tar -jcvf test.bz2 *.txt -> test.bz2
34.7 tar -jxvf test.bz2 -> 得到對應的文件
34.8 -C: 指定解壓縮的路徑: tar -jxvf test.bz2 -C ../BBB
35. zip的壓縮及解壓縮
35.1 zip test *.txt -> test.zip ,提示:壓縮包的后綴不需要指定默認是.zip
35.2 unzip test.zip -> 得到是壓縮包里面的文件
35.3 unzip -d ./123 test.zip -> 解壓到指定路徑 , -d:表示解壓的路徑
36. chmod:修改權限
36.1 -r(4):可讀 -w(2):可寫 -x(1):可執行
36.2 u:當前用戶 g: 同組用戶 o: 其它用戶 a:所有用戶
36.3 +:添加權限, -:撤銷權限 , = : 賦值權限
36.4 chmod 000 1.txt : 全部沒有權限
36.5 chmod a=- 1.txt chmod a= 1.txt : 全部沒有權限
36.6 chmod 777 1.txt chmod a=rwx 1.txt : 都權限,可讀可讀可執行
36.7 chmod 664 1.txt chmod u=rw,g=rw,o=r 1.txt 設置不同用戶不同權限
37. cp選項
37.1-a: 保留文件原有權限,-a包含-r,也就是使用-a也可以拷貝文件夾
38. which : 查看命令的路徑
39. sudo -s: 切換到管理員賬號
40. passwd:修改密碼
41. who :當前那些用戶登陸
42. whoami:當前電腦登陸的用戶是誰
43. exit:退出
44. ssh: 遠程登陸 44.1 ssh : 可以遠程登陸服務端可以通過vim修改文件
45. scp: 遠程拷貝
45.1 scp 1.txt python@192.168.107.132:/home/python/Desktop ,把本地文件拷貝到服務器端
45.2 scp -r test python@192.168.107.132:/home/python/Desktop,把本地文件夾拷貝到服務器端
45.3 scp python@192.168.107.132:/home/python/Desktop/1.txt . , 把服務端的文件拷貝的本地
45.4 scp -r python@192.168.107.132:/home/python/Desktop/test . , 把服務端的文件夾拷貝的本地
46. apt list 支持的安裝包
47. vim的使用
47.1 命令模式, 編輯模式, 末行模式, 命令模式是編輯模式和末行模式的中轉站
48. vim常用命令
命令模式下:
i:插入模式光標之前插入
I:行首插入
o:光標下一行插入
O:光標上一行插入
a:光標之后插入
A:行尾插入
j:向下移動
k:向上移動
l:向右移動
h:向左移動
gg:跳至首行
G:跳至末行,數字+G:跳至指定行
L:跳至末行
yy:復制,數字+yy:從當前行復制指定行數
dd:剪切,數字+dd:從當前行剪切指定行數 D刪除光標后本行所有內容,包含光標
p:粘貼
u:撤銷
M:跳轉至屏幕中間一行
w:向后移動一個單詞
b:向前移動一個單詞
Ctrl+d:向下翻半屏
Ctrl+u:向上翻半屏
Ctrl+f:向下翻一屏
Ctrl+b:向上翻一屏
Ctrl+r:反撤銷
r:替換當前字符
R:替換光標后的字符
x:刪除光標后一個字符
X:刪除光標前一個字符
d0:刪除光標前本行所有內容,不包含當前光標所在位置
dw:刪除光標開始位置的單詞,包含當前字符
>>:向右縮進 數字+>>:當前行開始的指定行數向右縮進
<<:向左縮進 數字+<<:當前行開始的指定行數向左縮進
v:從當前字符選擇 選擇后:y:復制 d:剪切
V:從當前行選擇? 選擇后:y:復制 d:剪切
Shift+;:進入末行模式
末行模式下
q:退出
q!:強制退出,不保存
w:保存
wq:保存并退出
x:保存并退出
/:字符串查找? n:下一個? N:上一個
%s/old/new/g:把文本中的old全部替換為new
2,10s/old/new/g:把文本中2到10行中的old替換為new
!:直接在vi中執行shell命令
3.烏班圖執行python文件
./1.py 直接執行.py文件,需要先在.py文件的首行輸入 #!/usr/bin/python3
#!后面跟python3的路徑,python3所在的路徑可以用which python3查詢
4.網絡
<1>網絡概述
什么是網絡
網絡就是指將具有獨立功能的多臺計算機通過通信線路連接起來,在網絡管理軟件及網絡通信協議下,實現資源共享和信息傳遞的虛擬平臺。
通俗理解網絡就是把雙方或者多方設備連接起來的一個工具,然后可以進行數據傳遞
學習網絡的目的
能夠編寫基于網絡通信的軟件,通過網絡把數據從一方傳遞到另外一方,完成數據的共享
通俗來說就是能夠進行網絡編程,開發網絡通信程序或者軟件。
<2>ip地址
ip地址的概念
ip地址是標識網絡中唯一的一臺設備的
ip地址的作用
通過ip地址找到網絡中唯一一臺設備,然后可以給設備發送數據
私有ip
私有ip就是局域網中使用的ip地址,國際規定有一部分ip地址是在局域網中使用的
私有ip的范圍,也就是不在公網中使用的ip地址范圍:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
本機ip地址
127.0.0.1表示本機ip地址; 本機域名是localhost; 通過域名可以解析一個ip地址,域名方便大家記憶某臺電腦的主機地址
<3>Linux命令(ping, ifconfig)
查看或配置網卡信息:ifconfig
mac和Linux 用 ifconfig
Windows 用 ipconfig
測試遠程主機連通性:ping
通常用ping來檢測網絡是否正常
小結
1.ping 127.0.0.1 檢查本地網卡是否正常
2.ping www.baidu.com 檢查是否能上公網
3.ping 當前局域網的ip地址 檢查是否在同一個局域網內
<4>端口
什么是端口
端口是傳輸數據的通道,好比教室的門,是數據傳輸必經之路。
如果一個程序需要收發網絡數據,那么就需要有這樣的端口
端口號
問題:一個電腦上運行著多個應用程序,都需要收發數據,如何區分給那個應用程序呢?
既然有這么多端口,操作系統為了統一管理,所以進行了編號,這就是端口號
端口號:使用唯一一個編號來標識端口, 其實就是標識端口的一個編號。
在linux系統中,端口號有65536(2的16次方)個
端口號劃分
端口號不是隨意使用的,而是按照一定的規定進行分配。
端口號分為知名端口號和動態端口號
知名端口號(Well Known Ports)
知名端口號: 系統程序使用的端口號
知名端口號是眾所周知的端口號,范圍從0到1023
80端口分配給HTTP服務
21端口分配給FTP服務
一般情況下,如果一個程序需要使用知名端口的需要有root權限
動態端口號(Dynamic Ports)
動態端口號: 程序員開發應用程序使用端口號, 之所以稱為動態端口,是因為它一般不固定分配某種服務,而是動態分配。
動態端口的范圍是從1024到65535
注冊端口:端口1024到49151
動態端口:從49152到65535
當這個程序關閉時,同時也就釋放了所占用的端口號
怎樣查看端口號 ?
用 netstat -an 查看程序所使用的端口號
lsof -i [tcp/udp]:2425 查看端口號對應的應用程序
提示: 如果端口號找不到應用程序,使用管理員權限加上sudo
可以全部用sudo lsof -i:端口號
總結:
網絡通信的流程是先通過ip地址找到網絡中的設備,再通過端口號來找到對應的端口,然后通過端口把數據傳輸給對應的應用程序
5.網絡傳輸方式-UDP
<1>UDP概念
UDP:英文全拼(User Datagram Protocol)簡稱用戶數據報協議,它是無連接的、不可靠的網絡傳輸協議
<2>UDP特點
因為udp發送數據之前不需要建立連接所以具有以下特點
無連接
資源開銷小
傳輸速度快
udp每個數據包最大是64K
<3>UDP的優缺點
優點:
傳輸速度快
不需要連接,資源開銷小
缺點:
傳輸數據不可靠,容易丟數據包
沒有流量控制,當對方沒有及時接收數據,發送方一直發送數據會導致緩沖區數據滿了,電腦出現卡死情況,所有接收方需要及時接收數據。
<4>UDP的使用場景
當對網絡通訊質量要求不高的時候,要求網絡通訊速度能盡量的快,這時就可以使用UDP
qq音視頻傳輸,微信音視頻傳輸
上課使用的共屏軟件
發送廣播消息
小結:
UDP是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,但是并不能保證它們能到達目的地。由于UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。
6.socket介紹
<1>不同電腦上的進程之間如何通信
首先通過ip地址找到網絡中對應的電腦,然后通過傳輸協議和端口號來確定這個進程(運行起來的軟件),那么數據如何傳輸需要使用socket來完成,也就是進程之間通信使用socket
注意:
所謂進程指的是:運行的程序或者軟件稱之為進程(在講解多任務編程時進行詳細講解)
所謂進程間通信指的是:運行的程序之間的數據共享
<2>什么是socket
socket(簡稱 套接字) 是進程間通信一個工具,它能實現把數據從一方傳輸到另外一方,完成不同電腦上進程之間的通信, 它好比數據的搬運工。
<3>socket使用場景
不夸張來說,只要跟網絡相關的應用程序或者軟件都使用到了socket
小結:
socket就是完成不同電腦上進程之間通信的一個工具,負責進程之間數據的傳輸
7.udp網絡程序-發送、接收數據
<1>udp網絡程序流程
創建一個基于udp的網絡程序流程很簡單,具體步驟如下:
創建客戶端套接字
發送/接收數據
關閉套接字
總結: 網絡通信的流程
1. 對方的ip地址
2. 應用程序的端口號
3. 數據的傳輸協議(udp/tcp)
4. 使用socket收發數據
<2>創建socket
在 Python 中 使用socket 模塊的函數 socket 就可以完成:
import socket
socket.socket(AddressFamily, Type)
說明:
函數 socket.socket 創建一個 socket,該函數帶有兩個參數:
Address Family:IP地址類型; AF_INET表示ipv4類型、AF_INET6表示ipv6類型; Type:套接字類型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 協議)或者 SOCK_DGRAM(數據報套接字,主要用于 UDP 協議)
創建一個udp socket(udp套接字)
import socket
# 創建udp的套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ...這里是使用套接字的功能(省略)...
# 不用的時候,關閉套接字
s.close()
說明
套接字使用流程 與 文件的使用流程很類似 創建套接字 使用套接字收/發數據 關閉套接字
<3>發送數據sendto()
代碼如下:
import socket
# 1. 創建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 準備接收方的地址
# '192.168.1.103'表示目的ip地址
# 8080表示目的端口
dest_addr = ('192.168.1.103', 8080)? # 注意 是元組,ip是字符串,端口是數字
# 3. 從鍵盤獲取數據
send_data = input("請輸入要發送的數據:")
# 4. 發送數據到指定的電腦上的指定程序中
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 5. 關閉套接字
udp_socket.close()
<4>發送、接收數據
import socket
# 1. 創建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 準備接收方的地址
dest_addr = ('192.168.236.129', 8080)
# 3. 從鍵盤獲取數據
send_data = input("請輸入要發送的數據:")
# 4. 發送數據到指定的電腦上
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 5. 等待接收對方發送的數據
recv_data = udp_socket.recvfrom(1024)? # 1024表示本次接收的最大字節數
# 6. 顯示對方發送的數據
# 接收到的數據recv_data是一個元組
# 第1個元素是對方發送的數據
# 第2個元素是對方的ip和端口
print(recv_data[0].decode('gbk'))
print(recv_data[1])
# 7. 關閉套接字
udp_socket.close()
8.數據編碼和解碼
編碼和解碼操作
str->bytes:encode編碼
bytes->str:decode解碼
字符串通過編碼成為字節碼,字節碼通過解碼成為字符串。
其中decode()與encode()方法可以接受參數,其聲明分別為:
bytes.decode(encoding="utf-8", errors="strict")
str.encode(encoding="utf-8", errors="strict")
其中的encoding是指在解碼編碼過程中使用的編碼格式,errors是指錯誤的處理方案。
注意:
strict:表示嚴格按照指定編解碼方式進行編碼和解碼,如果編解碼不成功則崩潰
ignore:表示忽略編解碼不成功的字符,如果編解碼不成功程序不會崩潰
9.udp綁定端口號
<1>綁定信息
一般情況下,在一臺電腦上運行的網絡程序有很多,為了不與其他的網絡程序占用同一個端口號,往往在編程中,udp的端口號一般不綁定
但如果需要做成一個服務器端的程序的話,是需要綁定的
一般服務性的程序,往往需要一個固定的端口號,這就是所謂的端口號綁定
<2>綁定示例
#coding=utf-8
from socket import *
# 1. 創建套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 綁定本地的相關信息,如果一個網絡程序不綁定,則系統會隨機分配
#? ip地址和端口號,ip一般不用寫,表示本機的任何一個ip
local_addr = ('', 7788)
udp_socket.bind(local_addr)
# 3. 等待接收對方發送的數據
recv_data = udp_socket.recvfrom(1024) #? 1024表示本次接收的最大字節數
# 4. 顯示接收到的數據
print(recv_data[0].decode('gbk'))
# 5. 關閉套接字
udp_socket.close()
總結
一個udp網絡程序,不綁定端口號,此時操作系統會隨機分配一個端口號,如果綁定端口號,每次啟動程序端口號不變。
10.UDP發送廣播消息
參考代碼
import socket
if __name__ == '__main__':
# 創建udpsocket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 設置socket的選項,允許發送廣播消息
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
# 發送廣播消息
udp_socket.sendto("大家好,我叫小郭同學,多多關照!".encode("gbk"), ("255.255.255.255", 9090))
# 關閉socket
udp_socket.close()
總結
廣播地址最常用的是255.255.255.255 通用的廣播地址,不區分網段
192.168.14.255: 局域網內的廣播地址
11.udp聊天器
目標
能夠寫出udp聊天器功能程序
說明
在一個電腦中編寫1個程序,有2個功能
1.獲取鍵盤數據,并將其發送給對方
2.接收數據并顯示
選擇以上的2個功能調用
參考代碼
import socket
def send_msg(udp_socket):
"""獲取鍵盤數據,并將其發送給對方"""
# 1. 從鍵盤輸入數據
msg = input("\n請輸入要發送的數據:")
# 2. 輸入對方的ip地址
dest_ip = input("\n請輸入對方的ip地址:")
# 3. 輸入對方的port
dest_port = int(input("\n請輸入對方的port:"))
# 4. 發送數據
udp_socket.sendto(msg.encode("utf-8"), (dest_ip, dest_port))
def recv_msg(udp_socket):
"""接收數據并顯示"""
# 1. 接收數據
recv_msg = udp_socket.recvfrom(1024)
# 2. 解碼
recv_ip = recv_msg[1]
recv_msg = recv_msg[0].decode("utf-8")
# 3. 顯示接收到的數據
print(">>>%s:%s" % (str(recv_ip), recv_msg))
def main():
# 1. 創建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 綁定本地信息
udp_socket.bind(("", 7890))
while True:
# 3. 選擇功能
print("="*30)
print("1:發送消息")
print("2:接收消息")
print("="*30)
op_num = input("請輸入要操作的功能序號:")
# 4. 根據選擇調用相應的函數
if op_num == "1":
send_msg(udp_socket)
elif op_num == "2":
recv_msg(udp_socket)
else:
print("輸入有誤,請重新輸入...")
if __name__ == "__main__":
main()
總結
以上是生活随笔為你收集整理的手机上python编程工具3和3h有区别吗_Python 高级 3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java相等_Java 判断相等
- 下一篇: DS系列服务器硬盘扇区,硬盘基本知识(磁