需求:基於tcp的套接字實現遠端執行命令的操作
**示例:
1#2客戶端**#client端部分
3import socket #
匯入騷凱特模組
4 cmdobj = socket.socket(socket.af_inet,socket.sock_stream)#
例項化騷凱特物件5#
基於網路型別(af_inet)的套接字,基於tcp協議(sock_stream)
6 cmdobj.connect(("
127.0.0.1
",5741))#
建立與服務端的通訊
7print(cmdobj.recv(1024).decode("
utf8
"))#
顯示服務端的歡迎資訊
8while
true:
9 cmdscript = input("
>>>:
")#寫入想要執行的cmd命令
10if
not cmdscript: continue
#判斷是否為空,避免服務端出現迴圈錯誤
11if(cmdscript == "
exit
"):#
先判斷是否退出,如果不退出則繼續執行
12print("
感謝使用,再見!")
13break
14 cmdobj.send(cmdscript.encode("
utf8
"))#
將cmd命令轉為bytes傳輸給服務端
15 recv = cmdobj.recv(1024)#
接收服務端傳來的bytes資訊
16try:17
print(recv.decode("
gbk"
))18
#嘗試將bytes資訊使用gbk方式編碼,在windows下的編碼是gbk,不過如果編碼錯誤的話還可以通過捕獲異常來重新編碼
19except unicodedecodeerror as ude:#
判斷異常為轉碼異常
20print(recv.decode("
utf8
"))#
使用utf8編碼bytes資訊(這裡其實就是為了返回服務端對egon進行處理的那條資訊)
1#2伺服器端**import socket,subprocess#
匯入騷凱特模組和命令列互動模組
3 cmdobj =socket.socket(socket.af_inet,socket.sock_stream)4#
例項化騷凱特物件,基於網路型別(af_inet)的tcp流傳輸(sock_stream)
5 cmdobj.bind(("
127.0.0.1
",5741))#
建立服務端的繫結資訊服務ip是127.0.0.1,埠號是5741
6 cmdobj.listen(5)#
建立監聽,後備鏈結最大值為5
7while
true:
8 clients,clientip = cmdobj.accept()#
等待客戶端的連線.........9#
並獲得連線控制代碼clients,和連線位址資訊clientip
10 clients.send(("
您當前的登陸ip位址為:%s
"%(clientip[0])).encode("
utf8"))
11#傳送給客戶端歡迎資訊
12while
true:
13try
:14 cmdscript = clients.recv(1024)#
接收客戶端傳來的bytes資料
15if
not cmdscript : continue
#如果為空跳出本次迴圈,避免服務端和粗線死迴圈情況
16if(cmdscript.decode("
utf8
") == "
egon
"):#
這裡是個趣味性**,認真學習者可忽略
17 clients.send("
somebody不是乙個有效的dos命令!
".encode("
utf8"))
18continue
19 res = subprocess.popen(cmdscript.decode("
utf8
"),shell=true,stdout=subprocess.pipe,stderr=subprocess.pipe)20#
例項化subprocess物件,獲得由客戶端發來的命令執行後的結果
21 resdata = res.stdout.read()#
讀取命令執行成功的結果
22if
not resdata:#
如果讀取命令執行成功的結果失敗
23 resdata = res.stderr.read()#
則讀取命令執行失敗的結果
24 clients.send(resdata)#
將結果返回給客戶端,這裡由於是在windows下所以預設的bytes編碼格式是gbk
25except
exception as e:
26print
(e)27
break
28clients.close()
29 cmdobj.close()
python實現socket收發資料的實現
1.建立套接字 2.使用套接字收 發資料 3.關閉套接字 import socket def main 建立套接字 udp socket socket.socket socket.af inet,socket.sock dgram 繫結資訊 這裡繫結的資料是乙個元組 udp socket.bind ...
leetcode練習 686 python實現
題目要求 給定兩個string字串a和b,判斷是否a通過重複,b能變成a中的乙個子集,如果能,返回重複的次數,如果不能,返回 1。我的思路是 1.當b not in a時,就讓a a 注意這裡用a的淺拷貝,只要加上a最初的值就行 count 1 2.如果a的長度已經大於b的三倍,還沒找到b,說明b是...
socket 使用select 非阻塞方式實現
select函式原型如下 int select int maxfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout select系統呼叫是用來讓我們的程式監視多個檔案控制代碼 socket 控制代碼 的狀...