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,記得關閉防火牆,不然延遲非常驚人
留言
張貼留言