แอปพลิเคชันการถ่ายโอนไฟล์ใน C (TCP)
แอปพลิเคชันการถ่ายโอนไฟล์อย่างง่ายที่สร้างขึ้นด้วย C โดยใช้ซ็อกเก็ต TCP แอปพลิเคชันนี้มี เซิร์ฟเวอร์ ที่รับฟังการเชื่อมต่อไคลเอนต์ที่เข้ามาและให้บริการไฟล์และ ไคลเอนต์ ที่ร้องขอไฟล์จากเซิร์ฟเวอร์และบันทึกไว้ในเครื่อง
ความต้องการ
ในการเรียกใช้แอปพลิเคชันนี้คุณจะต้อง:
- คอมไพเลอร์ MingW หรือ GCC (เพื่อรวบรวมรหัส C บน Windows)
- Visual Studio Code (เป็นทางเลือกสำหรับการแก้ไขและการจัดการรหัส)
- Git (ไม่บังคับสำหรับการโคลนที่เก็บและควบคุมเวอร์ชันนี้)
การดาวน์โหลด
ดาวน์โหลด mingw :
- ไปที่หน้า SourceForge ของ Mingw
- ติดตั้ง MINGW และตรวจสอบให้แน่ใจว่า
gcc รวมอยู่ในการติดตั้ง - เพิ่มโฟลเดอร์
bin ของ Mingw (เช่น C:MinGWbin ) ไปยังตัวแปรสภาพแวดล้อม เส้นทาง ของคุณ
ติดตั้งรหัส Visual Studio (ไม่บังคับ):
- ดาวน์โหลดและติดตั้งจากเว็บไซต์ของ Visual Studio Code
- คุณสามารถเปิดโฟลเดอร์โครงการในรหัส VS เพื่อจัดการและรวบรวมไฟล์ได้อย่างง่ายดาย
GTK 3 (สำหรับส่วนต่อประสานผู้ใช้กราฟิก)
ตรวจสอบการติดตั้ง GCC
เพื่อให้แน่ใจว่า GCC ได้รับการติดตั้งอย่างถูกต้องให้เปิดเทอร์มินัลหรือคำสั่งและพิมพ์:
คุณควรดูข้อมูลเวอร์ชันหากติดตั้ง GCC อย่างถูกต้อง
การดาวน์โหลด
- ดาวน์โหลด mingw :
- ไปที่หน้า SourceForge ของ Mingw
- ติดตั้ง MINGW และตรวจสอบให้แน่ใจว่า GCC รวมอยู่ในการติดตั้ง
- เพิ่มโฟลเดอร์ Bin ของ Mingw (เช่น C: Mingw bin) ไปยังตัวแปรสภาพแวดล้อมเส้นทางของคุณ
- ติดตั้ง GTK 3 :
- ดาวน์โหลด GTK 3 สำหรับ Windows จากเว็บไซต์ทางการของ GTK
- ติดตั้ง GTK และตรวจสอบให้แน่ใจว่า DLL ที่ต้องการจะถูกวางไว้ในเส้นทางของระบบของคุณหรือควบคู่ไปกับ Executables ที่รวบรวม หรือถ้าคุณใช้ MSYS2:
- เปิดเทอร์มินัล MSYS2 แล้วเรียกใช้:
pacman -S mingw-w64-x86_64-gtk3
เริ่มต้น
- โคลนที่เก็บนี้
- เปิดโครงการใน IDE หรือตัวแก้ไขข้อความที่คุณต้องการ
- คุณสามารถใช้รหัส Visual Studio, Code :: Blocks, DEV-C ++, CLION หรือตัวแก้ไขข้อความ IDE อื่น ๆ ที่รองรับการเขียนโปรแกรม C
- เปิดโฟลเดอร์โครงการในตัวแก้ไขที่คุณเลือกเพื่อจัดการและแก้ไขไฟล์ได้อย่างง่ายดาย
การรวบรวม - ไม่มี GTK
รวบรวมแอปพลิเคชันเซิร์ฟเวอร์และไคลเอนต์ดังนี้:
- รวบรวมเซิร์ฟเวอร์
gcc server.c -o server.exe -lws2_32
- รวบรวมไคลเอนต์
gcc client.c -o client.exe -lws2_32
สิ่งนี้จะสร้าง server.exe และ client.exe
เรียกใช้แอปพลิเคชัน - ไม่มี GTK
ขั้นตอนที่ 1: เริ่มเซิร์ฟเวอร์
- เปิดเทอร์มินัลหรือพรอมต์คำสั่งในไดเรกทอรีโครงการ
- เรียกใช้แอปพลิเคชันเซิร์ฟเวอร์:
ขั้นตอนที่ 2: เรียกใช้ไคลเอนต์
- ใน เทอร์มินัลแยกต่างหาก หรือบน เครื่องอื่น นำทางไปยังไดเรกทอรีโครงการ
- เรียกใช้ไคลเอนต์ระบุที่อยู่ IP ของเซิร์ฟเวอร์และชื่อไฟล์ที่คุณต้องการดาวน์โหลด:
./client.exe < server_ip > < filename >
- แทนที่ <server_ip> ด้วยที่อยู่ IP ของเซิร์ฟเวอร์ (เช่น 127.0.0.1 หากทำงานในเครื่อง)
- แทนที่ด้วยชื่อไฟล์ที่คุณต้องการดาวน์โหลดจากไดเรกทอรีของเซิร์ฟเวอร์
./client.exe 127.0.0.1 testfile.txt
ไคลเอนต์จะเชื่อมต่อกับเซิร์ฟเวอร์ขอไฟล์ที่ระบุและบันทึกไว้ในเครื่องด้วยชื่อไฟล์เดียวกัน
คอมไพล์เซิร์ฟเวอร์และไคลเอนต์ - ด้วย GTK
- ตั้งค่า pkg-config เพื่อค้นหา GTK:
- หากคุณใช้ MSYS2 หรือตัวจัดการแพ็คเกจอื่นเช่น VCPKG ตรวจสอบให้แน่ใจว่าเส้นทาง PKG-Config ได้รับการกำหนดค่าอย่างถูกต้อง ใน MSYS2 คุณสามารถเรียกใช้คำสั่งต่อไปนี้:
export PKG_CONFIG_PATH= " /mingw64/lib/pkgconfig "
- อัปเดต c_cpp_properties.json ในรหัส Visual Studio: เพื่อให้แน่ใจว่ารหัส Visual Studio รับรู้ GTK และไลบรารีอื่น ๆ ให้อัปเดตไฟล์ c_cpp_properties.json เพื่อรวมเส้นทางไปยัง GTK และไลบรารีอื่น ๆ ที่จำเป็น: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง: ตัวอย่าง
- กด Ctrl + Shift + P และค้นหา C/C ++: แก้ไขการกำหนดค่า (UI)
- ในส่วนรวมของเส้นทางเพิ่มเส้นทางเช่น:
" C:/msys64/mingw64/include/gtk-3.0 " ,
" C:/msys64/mingw64/include/glib-2.0 " ,
" C:/msys64/mingw64/lib/glib-2.0/include " ,
" C:/msys64/mingw64/include/pango-1.0 " ,
" C:/msys64/mingw64/include/cairo " ,
" C:/msys64/mingw64/include/gdk-pixbuf-2.0 " ,
" C:/msys64/mingw64/include/atk-1.0 " ,
" C:/msys64/mingw64/include/harfbuzz "
- รวบรวมเซิร์ฟเวอร์และไคลเอนต์:
- รวบรวมแอปพลิเคชันเซิร์ฟเวอร์:
gcc server_app.c -o server_app.exe ` pkg-config --cflags --libs gtk+-3.0 ` -lws2_32
- รวบรวมแอปพลิเคชันไคลเอนต์:
gcc client_app.c -o client_app.exe ` pkg-config --cflags --libs gtk+-3.0 ` -lws2_32
สิ่งนี้จะสร้าง server_app.exe และ client_app.exe ในโฟลเดอร์โครงการของคุณ
รันแอปพลิเคชัน - ด้วย GTK
ขั้นตอนที่ 1: เริ่มเซิร์ฟเวอร์
- เปิดเทอร์มินัลหรือพรอมต์คำสั่งในไดเรกทอรีโครงการ
- เรียกใช้แอปพลิเคชันเซิร์ฟเวอร์:
ขั้นตอนที่ 2: เรียกใช้ไคลเอนต์
- ในเทอร์มินัลแยกต่างหากหรือบนเครื่องอื่นนำทางไปยังไดเรกทอรีโครงการ
- เรียกใช้ไคลเอนต์ระบุที่อยู่ IP ของเซิร์ฟเวอร์และชื่อไฟล์ที่คุณต้องการดาวน์โหลด:
การแก้ไขปัญหา
- การเชื่อมต่อปฏิเสธ (10061) : ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์กำลังทำงานและฟังบน IP และพอร์ตที่ระบุ
- IP และพอร์ตที่ไม่ถูกต้อง : ตรวจสอบทั้งไคลเอนต์และเซิร์ฟเวอร์ใช้ IP และพอร์ตที่ถูกต้อง
- ไฟร์วอลล์หรือแอนติไวรัส : ปิดการใช้งานไฟร์วอลล์หรือซอฟต์แวร์ Anitivirus ชั่วคราวหากบล็อกการเชื่อมต่อ
หมายเหตุ
- ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์และไคลเอนต์อยู่ในเครือข่ายเดียวกันหรือปรับการตั้งค่าเราเตอร์และไฟร์วอลล์เพื่ออนุญาตการสื่อสาร
- แอปพลิเคชั่นนี้ออกแบบมาสำหรับการถ่ายโอนไฟล์พื้นฐานและปัจจุบันรองรับการเชื่อมต่อกับลูกค้าเดียว
การปรับปรุงในอนาคต - ตัวติดตาม
- การถ่ายโอนไฟล์หลายไฟล์:
- รองรับการถ่ายโอนหลายไฟล์ในครั้งเดียวหรือในชุด สิ่งนี้อาจเกี่ยวข้องกับการส่งอาร์เรย์ของชื่อไฟล์แล้วถ่ายโอนแต่ละไฟล์หลังจากนั้น
- การถ่ายโอนไดเรกทอรี:
- อนุญาตให้ถ่ายโอนไดเรกทอรีทั้งหมดซึ่งอาจเกี่ยวข้องกับการส่งไฟล์และโฟลเดอร์ทั้งหมดซ้ำพร้อมกับข้อมูลเมตา
- การบีบอัด:
- เพื่อลดเวลาการถ่ายโอนคุณสามารถบีบอัดไฟล์ก่อนส่งและคลายการบีบอัดที่ด้านที่ได้รับ
- การเข้ารหัส:
- ใช้การเข้ารหัส (เช่น SSL/TLS) สำหรับการถ่ายโอนไฟล์ที่ปลอดภัยโดยเฉพาะอย่างยิ่งหากคุณวางแผนที่จะส่งข้อมูลที่ละเอียดอ่อน
- ส่วนต่อประสานผู้ใช้ ✔
- สำหรับแอปพลิเคชันที่มี GTK ✔
- สำหรับแอปพลิเคชันที่ไม่มี GTK ✔
- การจัดการข้อผิดพลาดและปัญหาอื่น ๆ : ✔
- การ overwritting ไฟล์, ประเภทไฟล์พิเศษ, การตรวจสอบความสมบูรณ์ของไฟล์
หากคุณต้องการมีส่วนร่วมแม้ว่าคุณจะใช้ Chat-GPT โปรด ทราบว่าคุณกำลังทำอะไรก่อนเพราะคุณเสียเวลาทั้งสอง (โดยการอยู่และตรวจสอบรหัสที่ไม่สมบูรณ์ของรถบั๊กกี้) และของคุณ (โดยขอให้ GPT เขียนโค้ดและไม่ได้รับ PR) เป็นที่ชัดเจนเมื่อผู้ร้องขอใช้ AI และไม่ได้คิดถึงปัญหา
ใบอนุญาต
โครงการนี้เป็นโอเพ่นซอร์สและมีให้ภายใต้ใบอนุญาต MIT