python socket例項
socket_server_ssl.py檔案:
import socket
import os
server = socket.socket()
server.bind(('localhost',9999))
server.listen()
while True:
conn,addr = server.accept()
print(conn,addr)
while True:
print('wait the next command coming')
data = conn.recv(1024)#每次只接受100個位元組,若客戶端傳送過來的檔案超過1024,那麼會在下次輸入指令的時候再顯示出來。如客戶端輸入ipconfig一次性接受不完,客戶端再輸入dir那麼顯示的仍是上次未顯示完的ipconfig命令內容
if not data:
print('客戶端已斷開')
break
print('執行指令:',data)
cmd_res = os.popen(data.decode()).read() #os.popen接收字串,執行結果也是字串
print('befor send')
if len(cmd_res) == 0:
cmd_res = 'cmd_res has no output'
conn.send(str(len(cmd_res.encode())).encode('utf-8'))#為解決不能一次將所有內容給客戶端,先將內容大小告知客戶端.先將cmd_res編碼再計算len,否則漢字在編碼前後的長度不一樣
client_ack = conn.recv(1024)#等客戶端確認。第一個send後客戶端還沒收到結果第二個send就開始了,可能會造成兩個send的資料在同一個包裡(緩衝區滿了才會發給客戶端)造成粘包,所以等第一個send後客戶端確認後再下一個send
conn.send(cmd_res.encode('utf-8'))
print('after send')
socket_client_ssl.py檔案:
import socket
'''
客戶端執行send命令後伺服器會將內容存在緩衝區,預設等緩衝區滿後如1024個位元組就返回給客戶端,若緩衝區未單已滿等待超時也會返回給客戶端
'''
client = socket.socket()
client.connect(('localhost',9999))
while True:
cmd = input('>>:')#若字串前面加上b則只是把字母轉化為ASCII碼,對中文無用
if len(cmd) == 0:
continue
client.send(cmd.encode('utf_8'))#內容以bytes的格式傳送
cmd_res_size = client.recv(1024)#先接收檔案總大小
print('size-->',cmd_res_size)
client.send('準備好接收了'.encode('utf-8'))
received_size = 0
received_data = b''
while received_size < int(cmd_res_size.decode()):#只要接收到的總size小於檔案總size就繼續收
cmd_res = client.recv(1024)
received_size += len(cmd_res) #每次收到的內容長度可能不等於1024位元組,所以必須用len判斷
print(cmd_res.decode())
else:
print('done')
client.close()
相關文章
- ipv6 udp socket例項UDP
- python socket程式設計入門(編寫server例項)Python程式設計Server
- Qt 中Socket程式設計例項QT程式設計
- android socket程式設計例項Android程式設計
- Java的Socket通訊簡單例項Java單例
- storm實時計算例項(socket實時接入)ORM
- python 類和例項Python
- Python例項集錦Python
- python鬧鐘例項Python
- C# socket 阻止模式與非阻止模式應用例項C#模式
- python3:利用socket建立的一個簡單的聊天client端和server端例項PythonclientServer
- Python基礎——切片例項Python
- python100例項Python
- Python requests爬蟲例項Python爬蟲
- (轉)Python例項手冊Python
- python教程 python日期函式例項Python函式
- Python專案實戰例項Python
- Python學習:類和例項Python
- 用Python進行機器學習例項Python機器學習
- python幾個應用例項Python
- python獲取aliyun ECS例項Python
- python閉包詳解(例項)Python
- Python例項大全(基於Python3.7.4)Python
- Python例項之用Python求完全平方數Python
- python開發例項-python開發案例Python
- Python 描述符(Descriptor) 附例項Python
- python例項方法中self的作用Python
- python類例項化如何實現Python
- Python——astroplan庫入門例項(二)PythonAST
- [轉載] Python 機器學習經典例項Python機器學習
- python爬蟲例項專案大全Python爬蟲
- Python名稱空間例項解析Python
- Python的時間轉換 【例項】Python
- python通過thrift操作hbase例項Python
- Python3 SocketPython
- 【Python】socket通訊Python
- Python Socket ProgrammingPython
- Python socket 詳解Python