วันนี้ได้เขียนอะไรสนุกๆ เกี่ยวกับการจำลองขารับ ServerSocket เพื่อตอบกลับ สำหรับทำการทดสอบแทน AS400 แบบ simulation
Scripts
import java.io.*; import java.net.*; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; public class inbound { private static final int PORT = 5555; private static final String LOG_PATH = "log/inbound/"; public static void main(String[] args) { try (ServerSocket serverSocket = new ServerSocket(PORT)) { System.out.println("Server started at port: " + PORT); while (true) { Socket clientSocket = serverSocket.accept(); handleClient(clientSocket); } } catch (IOException e) { e.printStackTrace(); } } private static void handleClient(Socket clientSocket) { try { // รับข้อมูลจาก client BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine = in.readLine(); // บันทึกข้อมูลไปยังไฟล์ .txt โดยใช้เวลาปัจจุบันเป็นชื่อไฟล์ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMyyyyHHmmss"); LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Bangkok")); String fileName = LOG_PATH + formatter.format(now) + ".txt"; File file = new File(fileName); file.getParentFile().mkdirs(); // สร้าง directory หากยังไม่มี try (FileWriter writer = new FileWriter(file)) { writer.write(inputLine); } // แสดงผลในรูปแบบที่ต้องการ System.out.println("Save Log " + file.getName() + " | Length " + (inputLine != null ? inputLine.length() : 0)); // ดึงข้อมูลตอบกลับจากไฟล์ response.txt String responseMessage = ""; try (BufferedReader responseReader = new BufferedReader(new FileReader("DD25706.txt"))) { String line; while ((line = responseReader.readLine()) != null) { responseMessage += line + "\n"; } } // ส่งข้อมูลตอบกลับไปยัง client PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); out.println(responseMessage); clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } }
Open Port
sudo ufw allow 5555/tcp sudo ufw enable
Run Scripts
javac inbound.java java inbound
ขายิงลองเขียนเป็น python ทดสอบดูก่อนได้ว่าระบบใช้งานได้ เช่น
import socket from datetime import datetime, timedelta, timezone def send_and_receive(): THAI_TZ = timezone(timedelta(hours=7)) IP = "ip" PORT = 5555 with open("rq.txt", "r") as file: message = file.read() with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((IP, PORT)) s.sendall(message.encode()) data = s.recv(1024) current_time = datetime.now(THAI_TZ) filename = current_time.strftime('%d%m%Y%H%M%S') + "_RS.txt" with open(filename, 'w') as f: f.write(data.decode()) print('Received:', data.decode()) send_and_receive()
ส่วนเงื่อนไขอื่นๆ เช่นเก็บ log ลงฐานข้อมูล หรือแยก socket ตามรายการ ก็ไปอะแดปใช้ดูนะครับ สวัสดี..