應用場景
樹莓派連線在乙個動態ip的環境,我們需要知道ip位址進行ssh連線或者sftp檔案上傳
遠端執行命令,關機/殺程序/等
服務端 broadcast_server.py
# -*- coding:utf-8 -*-
import socket
import pickle
import os
import sys
reload(sys)
sys.setdefaultencoding('utf8')
s = socket.socket(socket.af_inet, socket.sock_dgram)
s.setsockopt(socket.sol_socket, socket.so_broadcast, 1)
port = 1060
s.bind(('', port))
print
'listen...', s.getsockname()
defcmd
(cmd):
p = os.popen(cmd,'r',1)
dat = p.read()
p.close()
return dat
defget_result
(action,code,params,message,dat):
r =
return r
while
true:
data, address = s.recvfrom(65535)
rec = pickle.loads(data)
print('<-{}:{}'.format(address,rec ))
sent = ""
if rec['action'] == "cmd":
res = cmd(rec['params'])
sent = pickle.dumps(get_result("cmd",0,rec['params'],"操作成功",))
print('-> {}'.format(address ))
s.sendto(sent.encode("utf-8"),address)
客戶端 broadcast_client.py
import socket
import pickle
import argparse
parser = argparse.argumentparser()
parser.add_argument('-a','--action',help='the action you want to send')
parser.add_argument('-c','--cmd',help='the command you want to execute')
args = parser.parse_args()
print args.action,args.cmd
s = socket.socket(socket.af_inet, socket.sock_dgram)
s.setsockopt(socket.sol_socket, socket.so_broadcast, 1)
port = 1060
network = '
'sent_data =
s.sendto(pickle.dumps(sent_data).encode('utf-8'), (network, port))
rec = s.recv(65535)
b = pickle.loads(rec)
print
"data:",b['data']['result']
使用說明:服務端程式放在宿主電腦中,我們還必須設定其開啟自動執行,可在~/.bashrc 中寫入執行命令我們可以定義自己的action,去操作不同的功能,更多功能請自行斟酌.這是乙個好思路,比如應用於家庭中對燈,窗簾等控制nohup python broadcast_server.py &
客戶端執行例子:
python broadcast_client.py -a cmd -c 'ifconfig'
python broadcast_client.py -a cmd -c 'netstat'
python broadcast_client.py -a cmd -c 'ps -aux | grep python'
python broadcast_client.py -a cmd -c 'kill -9 22234'
python broadcast_client.py -a cmd -c 'shutdown'
本小專案未完待續 Linux UDP實現廣播
特點 較tcp來講udp無需建立連線可以直接傳送訊息,udp是對網路環境完全不彌補的協議,所以使用dup就要允許有一定的丟包率,udp廣播是面向區域網內所有的裝置的。對比tcp連線時服務端的ip位址的重要性來講,udp廣播中本機的ip顯得並不重要了。在udp廣播中不同於tcp的我們需要對網路套接字設...
python udp的應用 ,多執行緒實現聊天功能
之前我們一起實現過單執行緒的udp聊天功能,但是並不實用,這裡我們用多執行緒重新寫下 如下 import socket import threading defprint menu 顯示選單 print 請輸入你要進行的操作 1 傳送資料 接收資料 退出 defrecv data udp socke...
UDP廣播socket實現
udp廣播 const int max buf len 255 int main int argc,char argv if lobyte wsadata.wversion 2 hibyte wsadata.wversion 2 建立socket socket connect socket conn...