Raspberry Pi 3 :以WebSocket連線JAVA Tomcat Server
Raspberry Pi端
Step 1 :在樹梅派上安裝Websocket Client
sudo pip install websocket-client
Step 2 :撰寫Script如下
import websocket
import thread,time
import GetIP
def on_message(ws, message):
print message
def on_error(ws, error):
print "Some Error %s" % error
def on_close(ws):
print "Server Closed !"
ws.close()
def on_open(ws):
def run(*args):
ws.send("Drone IP,%s" % rip)
time.sleep(1)
thread.start_new_thread(run, ())
if __name__ == "__main__":
rip = GetIP.get_lan_ip()
print "ip : %s" % rip> websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://Server的IP:8080/Eclipse專案名稱/websocketendpoint/"+rip,
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
Step 3 : GetIP是從網路找到的資源,如下
import os
import socket
if os.name != "nt":
import fcntl
import struct
def get_interface_ip(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s',
ifname[:15]))[20:24])
def get_lan_ip():
ip = socket.gethostbyname(socket.gethostname())
if ip.startswith("127.") and os.name != "nt":
interfaces = [
"eth0",
"eth1",
"eth2",
"wlan0",
"wlan1",
"wifi0",
"ath0",
"ath1",
"ppp0",
]
for ifname in interfaces:
try:
ip = get_interface_ip(ifname)
break
except IOError:
pass
return ip
Server端(Windows)
Step 1 :先安裝JAVA
Step 2 :下載Eclipse,解壓縮
Step 3 :下載Tomcat,解壓縮到桌面
Step 4 :下載MySQL(如果Server要建資料庫才需要)
Step 5 :開始安裝環境,執行Eclipse,建立Workspace
Step 6 :Tomcat設定教學文
Step 7 :安裝MySQL時,唯一要注意的是密碼設定要記住(在Accounts and Roles這個步驟),其他都是下一步就好
Step 8 :建立專案,File >> New >> Dynamic Web Project
Step 9 :設定如下(我使用的Tomcat版本較舊,新的設定一樣)
Step 10 :在src加入一個package,新增一個class
Step 11 :加入測試程式碼如下
import java.io.IOException;
import java.lang.reflect.Type;
import java.nio.ByteBuffer;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.text.DecimalFormat;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/websocketendpoint/{ip}")
//從樹梅派接收一個IP字串
public class Server {
@OnOpen
public void onOpen(Session session) throws Exception{
System.out.print("Server Open\n");
}
@OnClose
public void onClose(Session session){
System.out.print("Server Close\n");
}
@OnError
public void onError(Session session, Throwable e){
System.out.print("Something Error\n");
}
@OnMessage
public void onMessage(String message, Session currentSession) throws Exception{
System.out.print(message+"\n");
}
}
}
Step 11 :要執行時,對該java按右鍵 >> Run As >> 1 Run on Server >> Finish
Step12:此時可執行樹梅派上的python script,測試是否可以執行
注意:
1.如果Server沒有實體IP,記得樹梅派跟Server要在同一個區網
2.Server端如果運作的是Windows OS,記得關閉防火牆,不然延遲非常驚人

留言
張貼留言