50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
|
# -*- coding: utf-8 -*-
|
|||
|
'''
|
|||
|
Program: BS.py (Report bugs/comments to chikh@yuntech.edu.tw)
|
|||
|
Function: 發送端程式,模擬訊息發送端的行為;訊息的內容設為當下感測到的溫度值(以隨機產生的亂數作替代),
|
|||
|
將把溫度值打包成為字串的一部分,再透過網路機制把訊息字串傳送至接收端,隨即等候對方回應
|
|||
|
'''
|
|||
|
|
|||
|
import socket #引入網路連線所需的套件,傳送/接收訊息之用
|
|||
|
import time #引入時間套件,將呼叫sleep()函數
|
|||
|
import random #引入隨機亂數相關套件,將呼叫uniform()函數
|
|||
|
import sys
|
|||
|
import os
|
|||
|
|
|||
|
IP = 'localhost' #本機網路位址(IP address)
|
|||
|
#IP = '140.125.21.42' #對方端裝置的IP address
|
|||
|
port = 20001 #對方(收端)程式所用埠號
|
|||
|
|
|||
|
peerEndpoint = (IP,port) #端點:(對方IP地址,埠號)
|
|||
|
netLink = socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM) #創建網路連線所需的資料結構
|
|||
|
netLink.setblocking(False)
|
|||
|
|
|||
|
print("*** 基地台週期發送信標 ***\n");
|
|||
|
|
|||
|
if len(sys.argv) < 4:
|
|||
|
BSid = int(input("輸入基地台編號(0/1) ==> "))
|
|||
|
BSx, BSy = input("輸入基地台x y座標 ==> ").split()
|
|||
|
BSx, BSy = int(BSx), int(BSy)
|
|||
|
else:
|
|||
|
BSid, BSx, BSy = int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3])
|
|||
|
print("BS%d已啟動,地理位置(%d,%d)"%(BSid,BSx,BSy))
|
|||
|
|
|||
|
os.system("title "+ "BS%d監控視窗"%BSid)
|
|||
|
logFile = open("BS%d.txt"%BSid,"w")
|
|||
|
|
|||
|
while True:
|
|||
|
ts = time.time()
|
|||
|
msg = "%d %f %d %d"%(BSid,ts,BSx,BSy)
|
|||
|
logFile.write("%f "%ts)
|
|||
|
data = msg.encode("utf-8")
|
|||
|
netLink.sendto(data,peerEndpoint)
|
|||
|
print("BS"+msg,sep="")
|
|||
|
try:
|
|||
|
msgReceived, _ = netLink.recvfrom(1024)
|
|||
|
if msgReceived == b'quit': break
|
|||
|
except:
|
|||
|
time.sleep(0.5)
|
|||
|
|
|||
|
logFile.close()
|
|||
|
print("BS%d關閉"%BSid)
|