1. 程式人生 > >python筆記 3-4網路通訊服務 linux上服務搭建 vim udp socket

python筆記 3-4網路通訊服務 linux上服務搭建 vim udp socket

day3 網路通訊服務 linux上服務搭建 linux基本操作

FTP服務 FTP 檔案傳輸協議
服務端安裝vsftpd
命令:sudo apt-get install vsftpd

ssh服務
SSH 安全協議,常用於遠端登入
服務端:sudo apt-get install openssh-server
客戶端登入命令:ssh 伺服器使用者名稱@伺服器ip地址
使用ssh訪問,如訪問出現錯誤。可檢視是否有該檔案 ~/.ssh/known_ssh 嘗試刪除該檔案解決。
scp指令檔案傳輸
下載
scp 伺服器使用者名稱@伺服器ip地址:/home/teacher/test.py ./test.py
下載資料夾
scp -r 伺服器使用者名稱@伺服器ip地址:/home/teacher/test.py ./test.py
上傳
scp ./test.py 伺服器使用者名稱@伺服器ip地址:/home/teacher/test.py
軟體的安裝與解除安裝
常見的安裝方式
原始碼方式(tarball)方式
特點:穩定,但比較繁瑣
deb包方式
特點:安裝簡單,但無法解決包之間依賴問題
apt-get方式
特點:常見方式,安裝簡單,能解決包的依賴問題
更新Ubuntu 映象源為清華大學開源站
1,備份 /etc/apt/sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
2,編輯sources.list內容
從 清華大學開源站 複製過來
注意要使用sudo 否則提示沒有許可權儲存
3,儲存檔案
4,更新映象源
sudo apt-get update
vim編輯器
vi的三種模式
命令模式
開啟檔案,預設進入的就是該模式
進入插入模式
a\A\i\I\o\O
末行模式輸入 “:”
退出esc
末行模式進入 :
退出esc :wq 儲存退出 q退出
vim 命令模式

vim是vi的一個功能增強版
網路通訊概述
網路就是把雙方或者多方的裝置(電腦, 智慧手機,iPad)連線起來的一個工具
學習網路的目的: 通過網路完成不同電腦之間執行軟體(程序)的資料的通訊,資料從一方傳遞到另外一方,完成資料的共享。
IP地址ip地址就是標識網路中唯一的一臺裝置(電腦, 智慧手機,iPad), ip地址不會重複
ip地址分類
ipv4 點分十進位制 192.168.74.75
ipv6 16進位制資料, 號稱給世界上每一粒沙子分配一個唯一不同的ip地址
ip地址作用
ip地址的作用通過ip地址找到對應的裝置,然後給裝置傳送資料
ip地址構成:網路地址-主機地址

A, B, C, D, E 五類地址, 其中C類地址是最常用的ip地址
C類地址的特點: 前三位不變, 最後一個發生變化,它範圍是2的8次方,但是0,255 不能使用也就是可用是254ip地址
B類地址的特點: 前二位不變,後兩位傳送變化, 它的範圍是2的16次方-2
A類地址的特點: 第一位不變,後面三位傳送編碼, 他的範圍是2的24次方-2
私有IP
私有ip就是在區域網中使用的ip地址 一般由 192.168.xxx.xxx 172.16.xxx.xxx 10.xxx.xxx.x
本機IP
127.0.0.1 : 本地迴環或者本地環回 本機域名: localhost
有域名是方便大家使用和記住某臺電腦的訪問地址, 域名和ip地址是一一對應的
IP地址檢視
linux
ifconfig指令
檢視網絡卡資訊
windows
ipconfig
ping
檢查網路主機是否線上
ping 127.0.0.1 如果能夠ping通說明你電腦的網絡卡沒有問題
ping www.baidu.com 如果能夠ping通說明可以上網
ping 192.168.74.76 如果能夠ping通說明網路連線沒有問題,可以進行通訊

基本概念及分類
埠就是資料傳入或者傳出的一個入口,或者理解成現實生活中教室的大門
埠號: 使用唯一不同的編號來標識一個埠, 埠號不能重複
知名埠: 也可以稱為固定埠,是系統所需要使用的埠號 範圍 0-1023
動態埠: 程式設計師可以給程式設定的埠, 範圍 1024-65535, 提示: 如果程式設計師不給程式設定埠那麼系統會給程式預設在動態埠範圍內找一個空閒的埠進行設定,當然程式設計師還可以自己設定程式的埠
埠號檢視
netstat -an
檢視所有端口占用情況 sudo lsof -i[tcp/udp]:埠號
根據埠號找到所使用埠號應用程式
kill pid(程序的編號): 殺死指定程序編號的程序
kill -9 pid(程序的編號): 強制殺死指定程序的編號的程序
socket (重點)
翻譯成中文是套接字, 也可以稱為一個插座, 比如: 電腦A想要通過飛秋髮送資料,首先需要準備一個插座(socket),然後資料通過這個插座傳送出去,對方電腦需要準備一個插座(socket)來接收我傳送的資料
socket是可以完成不同電腦執行軟體資料的通訊工具,可以理解成是資料的搬運工。socket是不同電腦程序之間通訊的工具, 資料的傳遞都是需要這個socket的。

day4 網路通訊之 UDP VS TCP
編碼轉換
str–>bytes 字串轉換2進位制 稱為編碼
encode
encode(encoding=”字符集”, errors=”模式”)
bytes–>str 2進位制轉換 字串 稱為解碼
decode
decode(encoding=”字符集”, errors=”模式”)
為防止編碼轉碼失敗導致錯誤,可以加上 errors引數

encoding= 編碼解碼方式 errors= 可選引數 預設 strict (erroes錯誤處理,不至於報錯)
UPD 簡單的聊天器

udp繫結埠問題
bind() 可以繫結埠
bind((“192.168.31.163”, 7788)) 繫結 192.168.31.162 的 7788埠
bind((“”,7788) 繫結本機所有IP的7788埠 無引數預設本機
tcp簡介TCP傳輸協議
tcp是傳輸控制協議,能保證資料的準確性和有效性。
tcp是面向連線的,在傳送資料之前需要和對方建立連線,那麼間接驗證對方的ip地址有效性
tcp的通訊過程,首先要先建立連線,然後才能傳送和接收資料,最後關閉連線
tcp可以傳送大量資料。
tcp不適合做廣播的,比如: 檔案上傳和下載, 多數應用程式都是使用tcp
tcp的傳輸速度沒有udp傳輸速度快,因為udp不需要建立連線。
UDP傳輸協議
udp是使用者資料報協議(User Datagram Protocol)
udp傳送資料不需要建立連線
udp不能保證資料的準確性和有效性
udp只能傳送少量資料,每個資料包最大64KB
udp適合做廣播,比如飛秋上線操作, 廣播地址: 255.255.255.255, qq視訊用udp
udp主要用在廣播和視訊傳輸等方面,其它方面多數都是用tcp協議
tcp的特點(面試容易問到)
面向連線, 在傳送資料之前需要建立連線,間接驗證對方ip地址的有效性
可靠的傳輸(4小點)
1 應答機制,對方收到訊息底層會回覆,udp沒有
2 超時重傳,比如給對方傳送了一個數據,對方一直沒有回覆,那麼會隔一段時間再次傳送這個資料,如果對方一直沒有回覆,那麼會認為對方掉線了。
3 錯誤校驗, 如果接收的資料,資料包序號傳送了錯亂,tcp會自動進行排序,保證資料的有序性, 資料包如果重複會刪除重複的資料包,udp沒有
4 流量控制,tcp有流量控制,資料傳送在網絡卡快取區達到一定上限,對方不會一直髮送資料,需要等接收方開始接收資料的時候,等沒有達到上限的時候再次讓對方傳送的資料,保證資料在網絡卡快取區不會超出。udp沒有,如果對方使用迴圈一直髮送資料的那麼電腦會卡死
tcp 和 udp的不同的
1 tcp是面向連線的,傳送資料之前需要建立連線,間接驗證對方ip地址的有效性,udp直接傳送資料, 不需要建立連線
2 tcp有應答機制,收到資料底層會進行回覆,udp收到資料不好自動回覆。
3 tcp能保證資料的準確性和有效性,udp保證不了
4 tcp有超時重傳,udp沒有
5 tcp有流量控制,udp沒有
6 tcp需要建立連線需要額外的系統資源,而udp不需要建立連線,不需要額外的連線資源, upd比tcp要節省資源
7 tcp的傳輸速度沒有udp的傳輸速度快,因為udp不需要建立連線直接就傳送資料了。
8 udp適合做廣播功能,tcp不適合做廣播
tcp客戶端使用步驟
匯入socket模組
import socket
建立socket套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
建立連線
tcp_client_socket.connect((“192.168.31.221”, 8080))
傳送資料
tcp_client_socket.send(“hello world!”.encode())
關閉socket套接字
tcp_client_socket.close()
tcp伺服器端使用步驟
匯入socket模組
import socket
建立socket套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
繫結埠
tcp_server_socket.bind((“”, 8081))
設定伺服器套接字為被動監聽模式
tcp_server_socket.listen(128)
接受客戶端連線
new_client_socket, ip_port = tcp_server_socket.accept()
接收客戶端傳送的資料
recv_data = new_client_socket.recv(1024)
關閉和當前客戶端的連線
new_client_socket.close()
伺服器端不再接受新的客戶端連線
tcp_server_socket.close()
TCp 伺服器和客戶端通訊程式碼 程式碼

1、匯入模組 socket

import socket

2、建立套接字 TCP

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3、繫結埠和ip

tcp_server_socket.bind((“”, 8080))

4、開啟監聽,並且設定允許的最大連線數

listen() 開啟監聽,128表示的是最大允許連線128個客戶端

另外一個作用,把套接字 tcp_server_socket 由主動模式設定為被動連線

tcp_server_socket.listen(128)

5、等待客戶端連線

此處的while True 的作用是接收多個客戶端連線

while True:
# accept() 作用是用來接受客戶端連線
new_client_socket, client_ip_port = tcp_server_socket.accept()
print(“[新客戶端來了]”, client_ip_port)
# print(recv_data[0]) # socket 一個專門服務當前已經連線的看、客戶端的socket new_client_socket
# print(recv_data[1]) # 客戶端的ip和埠

# 此處的 while True 表示可以接收多少條資料
while True:
    # 6、開始資料收發
    recv1 = new_client_socket.recv(1024)
    # 如果 recv1 接收到的資料為空,表示客戶端可能已經下線
    # if len(recv1) != 0:
    if recv1:
        # 解碼
        re_text = recv1.decode("gbk")
        print("[新訊息來了]", client_ip_port, ":", re_text)

        # 收到資訊後,回覆收到
        new_client_socket.send("收到".encode())
    else:
        print("客戶端可能已經下線!")
        break
# 關閉和當前客戶端的通訊的連線
new_client_socket.close()

7、關閉連線, tcp_server_socket.close() 表示服務端不在接收新的客戶端連線,(老客戶端可以繼續服務)

tcp_server_socket.close()