โปรเจคนี้ผมเริ่มต้นจากการทำ Reverse Engineering โค้ดต้นแบบที่สร้างโดย AI เพื่อใช้ศึกษาเจาะลึกด้าน Network Programming และ Security โดยผมได้นำมารื้อโครงสร้าง ปรับแก้และทดสอบการทำงานในวง LAN จริง จนเข้าใจสถาปัตยกรรม Socket, I/O Streams และการทำ Data Encryption มากขึ้น
ระบบส่งไฟล์ระหว่างเครื่องคอมพิวเตอร์ (Peer-to-Peer) ภายในเครือข่าย (LAN) ที่พัฒนาด้วย Java โดยใช้โปรโตคอล TCP/IP
โปรเจคนี้มุ่งเน้นไปที่:
- ความสมบูรณ์ของข้อมูล (Data Integrity)
- ความปลอดภัยของข้อมูลระหว่างการส่ง (Basic Data Protection)
- การออกแบบโปรโตคอลสื่อสารแบบกำหนดเอง (Custom Protocol Design)
โดยมีการป้องกันการแก้ไขข้อมูลระหว่างทาง (File Tampering) และลดความเสี่ยงจากการถูกดักจับข้อมูลในระดับพื้นฐาน
ระบบทำงานแบบ Client-Server Architecture ผ่าน Custom Protocol ที่ออกแบบมาเพื่อการส่งไฟล์โดยเฉพาะ:
- อ่านไฟล์จากเครื่อง
- แบ่งข้อมูลเป็นส่วนๆ (Chunking)
- เข้ารหัส(Encrypt) ข้อมูลก่อนส่ง
- ส่งข้อมูลผ่าน TCP Socket แบบต่อเนื่อง (Streaming)
- รอรับการเชื่อมต่อผ่าน Port ที่กำหนด
- รับและถอดรหัสข้อมูล(Decrypt)
- เขียนไฟล์ลงใน Disk ปลายทาง
- ตรวจสอบความถูกต้องของข้อมูลหลังการรับเสร็จสิ้น
- มีการแลกเปลี่ยนยืนยันขนาดไฟล์ก่อนเริ่มส่ง
- ตรวจสอบ Checksum หลังส่งเสร็จ เพื่อยืนยัน Data Integrity ว่าข้อมูลรับมาครบจริงๆ
- Reliable File Transfer: ใช้ TCP ที่รับประกันการส่งข้อมูลครบถ้วนและเรียงลำดับถูกต้อง
- Data Encryption (Basic Security): มีการเข้ารหัสข้อมูล (Encryption) ก่อนส่งลง Network ป้องกันการถูกดักอ่านข้อมูล (Packet Sniffing)
- Data Integrity (Checksum/Validation): ตรวจสอบความถูกต้องของไฟล์ปลายทางเทียบกับต้นทาง เพื่อให้มั่นใจว่าไฟล์ไม่เสียหายหรือถูกดัดแปลง
- Stream Buffer Management: ใช้ Buffered I/O เพื่อลดการใช้หน่วยความจำและรองรับไฟล์ขนาดใหญ่
- Real-time Progress: แสดงสถานะและความคืบหน้าของการรับ-ส่งไฟล์ผ่าน Console
- Language: Java (JDK)
- Networking:
java.net.Socket,java.net.ServerSocket(TCP/IP) - File Handling:
java.io(FileInputStream, FileOutputStream, BufferedStreams) - Security: Java Cryptography Architecture (JCA)
- Symmetric Encryption (เช่น AES)
- Hashing / MessageDigest สำหรับ Checksum
การทดสอบระบบจำเป็นต้องมีคอมพิวเตอร์ 2 เครื่องที่อยู่ในวง LAN เดียวกัน (หรือรันบน localhost ผ่านเครื่องเดียวเปิด 2 Terminal)
เปิด Terminal และรันคำสั่งต่อไปนี้เพื่อรอรับการเชื่อมต่อ:
javac Server.java
java Server <PORT>
ตัวอย่าง:
java Server 8080เปิด Terminal และส่งคำสั่งพร้อมแนบไฟล์เป้าหมาย:
javac Client.java
java Client <SERVER_IP> <PORT> <FILE_PATH>
ตัวอย่าง:
java Client 192.168.1.10 8080 ./document.pdfจากการแกะโค้ดและพัฒนาโปรเจคนี้ ผมได้เรียนรู้ทักษะที่นำไปใช้งานจริงได้ดังนี้:
- Network Programming: เข้าใจการใช้งาน TCP Socket (Bind, Listen, Accept, Connect) มากขึ้น
- Data Stream Processing: การจัดการ I/O Streams ใน Java และการทำ Buffer เพื่อจัดการไฟล์ขนาดใหญ่
- Applied Cryptography: การประยุกต์ใช้อัลกอริทึมเข้ารหัส (Encryption) และการแฮช (Hashing/Checksum) เพื่อความปลอดภัยของข้อมูล ผมคิดว่าส่วนจะได้นำไปใช้ในอีกหลายๆโปรเจคในอนาคตเลย
โปรเจคนี้เริ่มต้นจากการใช้งานโปรแกรม AltSendme ซึ่งเป็นโปรแกรมส่งไฟล์แบบ peer-to-peer แล้วเกิดสงสัยการทำงานภายในของโปรแกรม เลยถามแนวคิดและ Architecture ของโปรแกรมจาก AI พอศึกษาได้ระดับนึงเลยลองเขียนโปรเจคนี้ขึ้นมาเพื่อทดลองทำโปรแกรมเล็กๆขึ้นมา เพื่อเสริมความเข้าใจตัวเอง