天天看點

python套接字程式設計_python 基于TCP協定的套接字程式設計詳解

基于TCP協定的套接字程式設計

實作電話溝通為例,這裡傳遞的是字元,可以自己嘗試去發送一個檔案

# 服務端

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'

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

以上就是本文的全部内容,希望對大家的學習有所幫助,也希望大家多多支援腳本之家。