查看文件大小:字節大小linux
import os size = os.path.getsize('0909.py') print(size)
servershell
import socket soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM) soc.bind(('127.0.0.1',8080)) soc.listen(5) conn,addr = soc.accept() data = conn.recv(1024) print('客戶端發送過來的:',data) data = data.upper() conn.send(data) conn.close() soc.close()
clientwindows
import socket # 192.168.11.152 # 192.168.11.126 # 127.0.0.1 soc = socket.socket() soc.connect(('192.168.11.152',8080)) soc.send('我'.encode()) data = soc.recv(1024) print(data) soc.close()
import socket soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) soc.bind(('127.0.0.1', 8080)) soc.listen(5) conn, addr = soc.accept() while True: data = conn.recv(1024) print(data.decode()) conn.close() soc.close()
import socket soc = socket.socket() soc.connect(('127.0.0.1',8080)) while True: in_s = input('請輸入要法送的數據:') soc.send(in_s.encode())
import socket soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) soc.bind(('192.168.11.44',8080)) #192.168.11.44 soc.listen(5) print('等待鏈接') conn, addr = soc.accept() print('客戶鏈接',addr) for i in range(100): data = conn.recv(1024) data = data.decode() print('客戶端發送過來的:', data) data1 = input('請輸入:') conn.send(data1.encode()) conn.close() soc.close()
import socket soc = socket.socket() soc.connect(('192.168.11.44',8080)) for i in range(100): data1 = input('請輸入:') soc.send(data1.encode()) data = soc.recv(1024) print('服務端回覆的:', data.decode()) soc.close()
server網絡
import socket #生成一個socket對象 soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #綁定地址跟端口號 soc.bind(('127.0.0.1',8001)) #監聽(半鏈接池的大小),不是鏈接數 soc.listen(3) #等着客戶端來鏈接,conn至關於鏈接通道,addr是客戶端的地址 while True: print('等待客戶端鏈接') conn,addr=soc.accept() #卡主,若是沒有客戶端鏈接,會一直卡在這,當有鏈接,才繼續往下走 print('有個客戶端鏈接上了',addr) while True: try: #windows若是客戶端斷開,會報錯,加了try #linux若是客戶端,斷開,不會報錯,會收到空, # 全部當data爲空時,也break #等待接收,最大收取1024個字節 data=conn.recv(1024) #會卡主,當客戶端有數據過來,纔會執行 if len(data)==0: #處理linux客戶端斷開, # 若是在window下這段代碼根本不會執行 # (即使是客服端發了空,這個地方也不會走到) break print(data) except Exception: break # 關閉通道 conn.close() # 關閉套接字 soc.close()
client多線程
import socket soc = socket.socket() soc.connect(('127.0.0.1',8080)) while True: in_s = input('請輸入要發送的數據:') soc.send(in_s.encode())
serverssh
import socket import subprocess soc=socket.socket(socket.AF_INET,socket.SOCK_STREAM) soc.bind(('127.0.0.1',8001)) soc.listen(3) while True: print('等待客戶端鏈接') conn,addr=soc.accept() print('有個客戶端鏈接上了',addr) while True: try: data=conn.recv(1024) if len(data)==0: break print(data) obj = subprocess.Popen(str(data,encoding='utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) #執行正確的結果 b 格式,gbk編碼(windows平臺) msg=obj.stdout.read() #把執行的結果經過網絡傳給c端 conn.send(msg) except Exception: break # 關閉通道 conn.close() # 關閉套接字 soc.close()
clientsocket
import socket soc=socket.socket() soc.connect(('127.0.0.1',8001)) while True: in_s=input('請輸入要執行的命令:') soc.send(in_s.encode('utf-8')) data=soc.recv(1024) print(str(data,encoding='gbk')) #粘包:tcp會把數據量較小,時間間隔較短的數據,當作同一個包發送
補充的subprocess模塊tcp
#ssh 是遠程執行命令 #subprocess 執行系統命令的模塊 import subprocess #執行系統dir命令,把執行的正確結果放到管道中 # obj=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE) obj=subprocess.Popen('tasklistdd',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) #拿到正確結果的管道,讀出裏面的內容 ss=obj.stdout.read() err=obj.stderr.read() print('錯誤信息',str(err,encoding='gbk')) #由於windows用的gbk編碼,用gbk解碼 # print(str(ss,encoding='utf-8')) print(str(ss,encoding='gbk'))
TCP能夠開始多線程編碼
server
#使用socketserver寫服務端 #導入模塊 import socketserver #本身定義一個類,必須繼承BaseRequestHandler class MyTcp(socketserver.BaseRequestHandler): #必須重寫handle方法 def handle(self): try: while True : #通訊循環 # print(self) #給客戶端回消息 #conn對象就是request #接收數據 print(self.client_address) data=self.request.recv(1024) print(data) if len(data)==0: return #發送數據 self.request.send(data.upper()) except Exception: pass if __name__ == '__main__': #實例化獲得一個tcp鏈接的對象,Threading意思是說,只要來了請求,它自動的開線程來處理鏈接跟交互數據 #第一個參數是綁定的地址,第二個參數傳一個類 server=socketserver.ThreadingTCPServer(('127.0.0.1',8009),MyTcp) #一直在監聽 #這麼理解:只要來一個請求,就起一個線程(造一我的,作交互) server.serve_forever()
client1
import socket soc = socket.socket() soc.connect(('127.0.0.1',8009)) while True: soc.send('xxx'.encode('utf8')) print(soc.recv(1024))
client2
import socket soc = socket.socket() soc.connect(('127.0.0.1',8009)) while True: soc.send('xxx'.encode('utf8')) print(soc.recv(1024))