python 基於TCP協議的套接字編程

基於TCP協議的套接字編程

實現電話溝通爲例,這裏傳遞的是字符,能夠本身嘗試去發送一個文件linux

# 服務端
import socket
# 1. 符合TCP協議的手機
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # TCP

# 2. 綁定手機號 一個服務器,咱們本身的電腦做爲服務器的話,用本身的IP地址
server.bind(('127.0.0.1',8000))  # 127.0.0.1 表明本地
# server.bind(('192.168.11.251',8000))  

server.listen(5) # 半鏈接池  能夠同時接收5個客戶端
# 3. 等待客戶端鏈接
print('start...')
# 連接循環
while True:
    # 通訊循環
    conn,client_addr = server.accept()
    while True:
        try:
            # 4. 收到信息 receive
            data = conn.recv(1024) # 每次接收多少字節,若是改成10,客戶端輸入dir,(能夠在cmd中輸入 dir,看看會獲得什麼) ,會出現什麼狀況呢,下次的博客會講到粘包問題,以及如何處理粘包問題
            print(data)
            # 5. 回消息
            conn.send(data.upper())
        except ConnectionAbortedError:
            continue
        except ConnectionResetError:
            break
# 客戶端1
import socket

# 1. 建立符合TCP協議的手機
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2. 撥號
client.connect(('127.0.0.1',8000))

while True:
    msg = input('please enter your msg') # dir
    # 3. 發送消息
    client.send(msg.encode('utf8'))
    
    # 4. 接收消息
    data = client.recv(1024)
    print(data)
# 客戶端2
import socket

# 1. 建立符合TCP協議的手機
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2. 撥號
client.connect(('127.0.0.1',8000))
# msg = input('please enter your msg>>>')

# 3. 發送消息
client.send('hello'.encode('utf8'))
client.send('world'.encode('utf8'))

# 4. 接收信息
data = client.recv(1024)
print(data)

模擬ssh遠程執行命令(linux系統)

# ssh服務端
import socket
import subprocess

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

server.bind(('192.168.11.251',8000))  # 這是個人機子,客戶端能夠是其餘人的機子
server.listen(5)

print('start...')
while True:
    conn,cient_addr = server.accept()
    print(client_addr) # 打印出的是其餘人機子的IP
    
    while True:
        try:
            cmd = conn.recv(1024) # dir
            print(cmd)
            
            # 幫你執行cmd命令,而後把執行結果保存到管道里
            pipeline = subprocess.Popen(cmd.decode('utf8'),
                                       shell = True,
                                       stderr = subprocess.PIPE, # std 標準
                                       stdout = subprocess.PIPE)
            
            stderr = pipeline.stderr.read()
            stdout = pipeline.stdout.read()
            
            conn.send(stderr)
            conn.send(stdout)
        except ConnectionResetError:
            break
# ssh客戶端
import socket

# 1.建立符合TCP協議的手機
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2. 撥號
client.connect(('192.168.11.210',8000))

while True:
    msg = input('please enter your msg') # dir
    # 3. 發送消息
    client.send(msg.encode('utf8'))
    
    # 4. 接收消息
    data = client.recv(10)
    print(data.decode('gbk')) # 在mac電腦上多是'utf8'

學習最有效的方法必定是有輸入,必定要輸出,這樣學的東西才能真正得有用shell

相關文章
相關標籤/搜索