C#으로 제작된 dummy 프로그램

WebSocket 클래스
1. @ServerEndpoint 설정
2. onMessage - UDP 데이터 송신
3. onClose - DatagramSocket close();
4. data - UDP 데이터 조합
package com.coforward.dev.controller; import org.json.simple.JSONObject; import org.springframework.stereotype.Service; import org.springframework.web.socket.WebSocketSession; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.nio.ByteBuffer; import java.util.HashMap; @Service @ServerEndpoint("/webSocket") public class WebSocket { // 상대방이 연결할수 있도록 UDP 소켓 생성 DatagramSocket socket; @OnMessage public void onMessage(String msg, Session session) throws Exception{ JSONObject obj = new JSONObject(); try { socket = new DatagramSocket(9047); // 전송받은 데이터를 지정할 바이트 배열선언 byte[] receive = new byte[156]; DatagramPacket packet = null; System.out.println("데이터 수신 준비 완료...."); while (true) { // UDP 통신으로 전송을 받을 packet 객체생성 packet = new DatagramPacket(receive, receive.length); // 데이터 전송 받기 socket.receive(packet); obj = data(receive); session.getBasicRemote().sendText(obj.toString()); } } catch (Exception e) { System.out.println(e.getMessage()); } } @OnOpen public void onOpen(Session session) { } @OnClose public void onClose(Session session){ socket.close(); } @OnError public void onError(Throwable thr) { System.out.println(thr); } public static JSONObject data(byte[] a) { JSONObject obj = new JSONObject(); // 데이터 길이 int[] arr = { 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4 }; // 데이터를 읽고 쓰는 방향(빅 엔디안(Big-Endian)0과 리틀 엔디안(Little-Endian)1) int[] order = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; // 데이터 타입(i:int, t:timestamp, d:double) String[] dtype = { "i", "t", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "i", "i", "i", "i" }; String[] arrN = { "StartStop", "TimeStamp", "Roll", "Pitch", "Yaw", "P", "Q", "R", "AX", "AY", "AZ", "GPSnor", "GPSeast", "GPSalt", "GPSspd", "Longspd", "Latspd", "GPShdg", "Ext1", "Ext2", "Ext3", "Ext4" }; int b = 0; int sn = 0; for (String name : arrN) { StringBuilder builder = new StringBuilder(); int n = 0; byte[] data = new byte[8]; int dn = 0; if (order[b] == 1) { // 역방향 for (int i = sn + arr[b] - 1; i >= sn; i--) { builder.append(a[i] + " "); data[dn] = a[i]; dn++; } } else { // 정방향 for (int i = sn; i < sn + arr[b]; i++) { builder.append(a[i] + " "); } } if (dtype[b].equals("d")) { // 데이터 형식 double value = Double.longBitsToDouble(ByteBuffer.wrap(data).getLong()); obj.put(name, value); System.out.println(name + " :: " + builder.toString() + " ------>>>> " + value); // System.out.println(name + " : " + value); } else if (dtype[b].equals("i")) { int value = ByteBuffer.wrap(data).getInt(); obj.put(name, value); System.out.println(name + " :: " + builder.toString() + " ------>>>> " + value); } else { long value = ByteBuffer.wrap(data).getLong(); obj.put(name, value); System.out.println(name + " :: " + builder.toString() + " ------>>>> " + value); } // System.out.println(name + " :: " + sn + " ------>>>> " + builder.toString()); sn = sn + arr[b]; b++; } System.out.println(""); return obj; } }
화면 html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WebSocket</title> </head> <script src="https://code.jquery.com/jquery-3.7.0.js"></script> <script> window.onload = function() { const webSocket = new WebSocket("ws://localhost:8080/webSocket"); // 웹 소켓 연결 이벤트 webSocket.onopen = function () { if (webSocket.readyState == 1) { const deviceNum = 1; webSocket.send(deviceNum); } }; // 웹 소켓 메세지 수신 webSocket.onmessage = function (event) { var msg = JSON.parse(event.data); $('#StartStop_val').text(msg.StartStop); $('#TimeStamp_val').text(msg.TimeStamp); $('#Roll_val').text(msg.Roll); $('#Pitch_val').text(msg.Pitch); $('#Yaw_val').text(msg.Yaw); $('#P_val').text(msg.P); $('#Q_val').text(msg.Q); $('#R_val').text(msg.R); $('#AX_val').text(msg.AX); $('#AY_val').text(msg.AY); $('#AZ_val').text(msg.AZ); $('#GPSnor_val').text(msg.GPSnor); $('#GPSeast_val').text(msg.GPSeast); $('#GPSalt_val').text(msg.GPSalt); $('#GPSspd_val').text(msg.GPSspd); $('#Longspd_val').text(msg.Longspd); $('#Latspd_val').text(msg.Latspd); $('#GPShdg_val').text(msg.GPShdg); $('#Ext1_val').text(msg.Ext1); $('#Ext2_val').text(msg.Ext2); $('#Ext3_val').text(msg.Ext3); $('#Ext4_val').text(msg.Ext4); }; // 웹 소켓 연결 종료 webSocket.onclose = function () { alert("웹소켓 서버와 연결이 종료되었습니다."); }; // 오류 발생 webSocket.onerror = function (error) { console.log(error); }; } </script> <body> <p><span>StartStop</span> : <span id="StartStop_val"></span></p> <p><span>TimeStamp</span> : <span id="TimeStamp_val"></span></p> <p><span> Roll</span> : <span id="Roll_val"></span></p> <p><span> Pitch</span> : <span id="Pitch_val"></span></p> <p><span> Yaw</span> : <span id="Yaw_val"></span></p> <p><span> P</span> : <span id="P_val"></span></p> <p><span> Q</span> : <span id="Q_val"></span></p> <p><span> R</span> : <span id="R_val"></span></p> <p><span> AX</span> : <span id="AX_val"></span></p> <p><span> AY</span> : <span id="AY_val"></span></p> <p><span> AZ</span> : <span id="AZ_val"></span></p> <p><span> GPSnor</span> : <span id="GPSnor_val"></span></p> <p><span> GPSeast</span> : <span id="GPSeast_val"></span></p> <p><span> GPSalt</span> : <span id="GPSalt_val"></span></p> <p><span> GPSspd</span> : <span id="GPSspd_val"></span></p> <p><span> Longspd</span> : <span id="Longspd_val"></span></p> <p><span> Latspd</span> : <span id="Latspd_val"></span></p> <p><span> GPShdg</span> : <span id="GPShdg_val"></span></p> <p><span> Ext1</span> : <span id="Ext1_val"></span></p> <p><span> Ext2</span> : <span id="Ext2_val"></span></p> <p><span> Ext3</span> : <span id="Ext3_val"></span></p> <p><span> Ext4</span> : <span id="Ext4_val"></span></p> </body> </html>
'Spring boot' 카테고리의 다른 글
Spring Boot - localhost에 도메인(hosts) 연결하여 SSL 적용 (0) | 2024.12.27 |
---|---|
gradlew bootRun Profile 옵션 추가 (1) | 2024.12.27 |
Spring Boot 스케줄러 @Scheduled 어노테이션 사용 (0) | 2023.10.27 |
Spring Boot에서 타임리프 이미지 동적 리소스 사용하기 (1) | 2023.10.11 |
Spring Boot + build.gradle + WebSocket 연동 (0) | 2023.07.17 |