การสร้างแอปพลิเคชันเซิร์ฟเวอร์-ลูกค้าด้วยซ็อกเก็ต C
โคลนโครงการและซีดีในไดเรกทอรีหลัก
เปิดเทอร์มินัลและตั้งค่าเซิร์ฟเวอร์ของคุณด้วยคำสั่งต่อไปนี้:
./server [port]คุณควรได้รับผลลัพธ์เช่นนี้:
Listening on 0.0.0.0:8080หลังจากนั้นเชื่อมต่อกับเซิร์ฟเวอร์กับไคลเอนต์ของคุณโดยใช้คำสั่งนี้:
./client [IP] [port]การเขียนโปรแกรมซ็อกเก็ตเป็นวิธีการเชื่อมต่อสองโหนดบนเครือข่ายเพื่อสื่อสารซึ่งกันและกัน ซ็อกเก็ตหนึ่ง (โหนด) ฟังพอร์ตเฉพาะที่ IP ในขณะที่ซ็อกเก็ตอื่น ๆ ยื่นมือออกไปอีกอันเพื่อสร้างการเชื่อมต่อ เซิร์ฟเวอร์สร้างซ็อกเก็ตฟังในขณะที่ไคลเอนต์เอื้อมมือไปที่เซิร์ฟเวอร์
int sockfd = socket ( domain , type , protocol ) int bind ( int sockfd , const struct sockaddr * addr , socklen_t addrlen );หลังจากการสร้างซ็อกเก็ตฟังก์ชั่นผูกจะผูกซ็อกเก็ตกับที่อยู่และหมายเลขพอร์ตที่ระบุใน ADDR (โครงสร้างข้อมูลที่กำหนดเอง) ในรหัสตัวอย่างเราผูกเซิร์ฟเวอร์เข้ากับ localhost ดังนั้นเราจึงใช้ inaddr_any เพื่อระบุที่อยู่ IP
int listen ( int sockfd , int backlog );มันทำให้ซ็อกเก็ตเซิร์ฟเวอร์อยู่ในโหมดพาสซีฟซึ่งรอให้ไคลเอนต์เข้าหาเซิร์ฟเวอร์เพื่อทำการเชื่อมต่อ backlog กำหนดความยาวสูงสุดที่คิวการเชื่อมต่อที่รอดำเนินการสำหรับ sockfd อาจเติบโต หากคำขอการเชื่อมต่อมาถึงเมื่อคิวเต็มลูกค้าอาจได้รับข้อผิดพลาดพร้อมข้อบ่งชี้ของ Econnrefused
int new_socket = accept ( int sockfd , struct sockaddr * addr , socklen_t * addrlen );มันแยกคำขอการเชื่อมต่อครั้งแรกในคิวการเชื่อมต่อที่รอดำเนินการสำหรับซ็อกเก็ตการฟัง Sockfd สร้างซ็อกเก็ตที่เชื่อมต่อใหม่และส่งคืนตัวบ่งชี้ไฟล์ใหม่ที่อ้างถึงซ็อกเก็ตนั้น ณ จุดนี้การเชื่อมต่อจะถูกสร้างขึ้นระหว่างไคลเอนต์และเซิร์ฟเวอร์และพร้อมที่จะถ่ายโอนข้อมูล
int connect ( int sockfd , const struct sockaddr * addr , socklen_t addrlen );การเชื่อมต่อ () การโทรเชื่อมต่อซ็อกเก็ตที่อ้างถึงโดย SOCKFD ของไฟล์ descriptor ไปยังที่อยู่ที่ระบุโดย ADDR ระบุที่อยู่และพอร์ตของเซิร์ฟเวอร์ใน ADDR
pthread_t thread_id ;
pthread_create ( & thread_id , NULL , client_handler , ( void * ) & client_socket );การใช้ pthread เพื่อสร้างเธรดสำหรับลูกค้าแต่ละรายของเราและจัดการกับวิธีการเฉพาะ