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
- Java的Socket通訊簡單例項Java單例
- python例項1Python
- python鬧鐘例項Python
- python 類和例項Python
- python100例項Python
- Python例項集錦Python
- C# socket 阻止模式與非阻止模式應用例項C#模式
- Python基礎——切片例項Python
- python3:利用socket建立的一個簡單的聊天client端和server端例項PythonclientServer
- Python例項之用Python求完全平方數Python
- Python例項大全(基於Python3.7.4)Python
- python開發例項-python開發案例Python
- Python專案實戰例項Python
- Python學習:類和例項Python
- Python 動態新增例項屬性,例項方法,類屬性,類方法Python
- python3.10監控redis例項PythonRedis
- python類例項化如何實現Python
- python例項方法中self的作用Python
- Python——astroplan庫入門例項(二)PythonAST
- Python 描述符(Descriptor) 附例項Python
- Python裝飾器例項講解(三)Python
- python呼叫方法必須例項化麼Python
- python3.7 jack棋牌11點例項Python
- python 單一程式例項 實現Python
- Python中的if、while、for 語法及例項PythonWhile
- Python入門基礎知識例項,Python
- python中類的建立和例項化Python
- 【Python】Python方法求水仙花數原碼例項Python
- php例項化物件的例項方法PHP物件
- Python中類建立和例項化過程Python
- Python實現遠端埠監控例項Python
- python例項建立銷燬的函式整理Python函式
- python中time庫的例項使用方法Python
- Python程式和執行緒例項詳解Python執行緒
- 基礎python5個例項運用Python
- Python 類的屬性與例項屬性Python
- python繼承和重寫init方法--例項Python繼承