בעולם של היום, רשתות מחשבים ממלאות תפקיד חשוב בתחום העברת הנתונים. זה נושא שכל מתכנת צריך לדעת. תחת רשת המחשבים, תכנות socket הוא אחד הנושאים החשובים בעולם התכנות. בנושא זה, אנו עושים כדי לדון בתכנות socket ובשיטה השונה של תכנות socket המיושמת ב-C++.
ב-C++, תכנות socket היא שיטה המשלבת שני צמתים או יותר זה עם זה ברשת, כך שהצמתים יכולים לשתף את הנתונים ללא כל אובדן של הנתונים. בהקשר זה, צומת אחד מאזין ליציאה אחת שמחוברת לכתובת IP מסוימת. כאשר הלקוח מגיע לשרת, השרת יוצר את ה-socket listener.
מה זה שקע?
בואו נבין על השקע על ידי דיבור בדוגמה בזמן אמת. שקע הוא סוג של מדיום המספק חיבור בין שני מכשירים. השקע יכול להיות מטען טלפון המספק את החיבור בין השקע לטלפון או הטלפון והמחשב הנייד הזה. בעזרת שקע מחוברות אפליקציות שונות לרשת המקומית עם יציאות שונות. בכל פעם כאשר השקע נוצר, השרת מציין את התוכנית, ותוכנית זו מציינת את השקע ואת כתובת הדומיין.
השקע הוא סוג של מנגנון המשמש להחלפת נתונים בין תהליכים שונים. כאן תהליכים אלה קיימים במכשירים שונים או באותו מכשיר המחוברים דרך רשת. לאחר יצירת החיבור לשקע, ניתן לשלוח את הנתונים לשני הכיוונים וממשיכים עד שאחת מנקודות הקצה סוגרת את החיבור.
נוהל בתקשורת לקוח-שרת
ישנם כמה נהלים שעלינו לבצע כדי ליצור תקשורת לקוח-שרת. אלה הם כדלקמן.
שלבים ליצירת שקעי שרת
ישנם כמה שלבים שבהם נוכל ליצור את השקע עבור השרת. אלה הם כדלקמן.
מה זה חיבור?
חיבור הוא סוג של קשר בין שני מכונות שבו שתי התוכנות ידועות זו על זו. שתי התוכנות הללו יודעות ליצור קשר זו עם זו; במילים אחרות, אנו יכולים לומר ששתי התוכנות הללו יודעות לשלוח את הביטים דרך הרשת. חיבור של השקע אומר ששתי המכונות אמורות לדעת את כל המידע ביניהן, כמו מספר הטלפון, כתובת ה-IP ויציאת ה-TCP.
android.process.acore ממשיך לעצור
שקע הוא סוג של אובייקט הדומה לקובץ המאפשר לתוכנית לקבל את החיבור הנכנס ולאפשר להם לשלוח או לקבל את החיבור הנכנס. כמו כן, זהו סוג של משאב המוקצה לתהליך של השרת.
אורך מחרוזת java
השרת יכול ליצור את ה-socket בעזרת ה-socket(). לא ניתן לשתף את השקע הזה עם אף מעבד אחר.
שלבים ללקוח
- השקע שעליו ניתן לתקשר את הנתונים זה עם זה.
- מאגר האחסון יכול לאחסן נתונים על הכתובת, כמו addr_of_data ו-adr_of_buffer.
- הוא עוסק בגודל המאגר, כמו len_of_data ו-len_of_buffer.
- זה עוסק בדגל שאומר איך הנתונים יישלחו.
שלבים ליצירת החיבור בשקע
זה יוצר חיבור בין הלקוחות השונים לבין השרת. אבל גם הלקוח וגם השרת יכולים להתמודד עם חיבור השקע. כל תהליך צריך ליצור חיבור לשקע משלו.
השלבים הכרוכים בהקמת שקע בצד הלקוח הם כדלקמן:
- זה יוצר שקע בעזרת קריאת מערכת socket() .
- לאחר מכן עלינו להתחבר לכתובת ה-socket של השרת בעזרת קריאת system() .
- אז אנחנו צריכים לשלוח ולקבל את הנתונים. אנחנו יכולים לעשות זאת בדרכים שונות. אנחנו יכולים לעשות את הפונקציה read() ו-write().
השלבים הכרוכים בהקמת שקע בצד השרת הם כדלקמן:
- תחילה הוא יוצר שקע בעזרת קריאת מערכת socket() .
- לאחר מכן הוא קושר את השקע לכתובת בעזרת קריאת המערכת bind() . כתובת מורכבת ממספר יציאה עבור שקע השרת במחשב המארח.
- לאחר מכן הוא מאזין לחיבור בעזרת שיחת המערכת ההקשבה () .
- לאחר מכן השרת מקבל את החיבור הנכנס בעזרת קריאה למערכת accept() . זה גם חוסם את כל הפקודות הנכנסות עד שלקוח מחובר לשרת.
- לאחר מכן מתחיל תהליך השליחה והקבלה של נתונים.
חיבור לקוחות מרובים ללא ריבוי הליכים
ישנן דוגמאות שונות שבהן אנו רואים כיצד משתמש בודד יכול להתחבר לשרת. בעולם התכנות של היום, מספר משתמשים מחוברים לשרת עם שקעים שונים.
ישנן דרכים שונות להשיג זאת. אחד מהם הוא ריבוי פתילים. בעזרת ריבוי השרשורים נוכל להשיג זאת. אנו יכולים ליישם תהליך ריבוי הליכים בעזרת הפונקציה select() .
דוגמא:
קוד ללקוח:
// Client side C/C++ program to demonstrate Socket // programming #include #include #include #include #include #define PORT 8080 int main(int argc, char const* argv[]) { int sock = 0, valread, client_fd; struct sockaddr_in serv_addr; char* hello = 'Hello from client'; char buffer[1024] = { 0 }; if ((sock = socket(AF_INET, SOCK_STREAM, 0)) <0) 0 8080 { printf(' socket creation error '); return -1; } serv_addr.sin_family="AF_INET;" serv_addr.sin_port="htons(PORT);" convert ipv4 and ipv6 addresses from text to binary form if (inet_pton(af_inet, '127.0.0.1', &serv_addr.sin_addr) <="0)" printf( ' invalid address not supported ((client_fd="connect(sock," (struct sockaddr*)&serv_addr, sizeof(serv_addr))) 0) printf(' connection failed send(sock, hello, strlen(hello), 0); printf('hello message sent '); valread="read(sock," buffer, 1024); printf('%s ', buffer); closing the connected close(client_fd); 0; code for server: server side c c++ program demonstrate programming #include #define port int main(int argc, char const* argv[]) server_fd, new_socket, valread; struct sockaddr_in address; opt="1;" addrlen="sizeof(address);" buffer[1024]="{" }; char* hello="Hello from server" ; creating file descriptor ((server_fd="socket(AF_INET," sock_stream, 0)) perror('socket failed'); exit(exit_failure); forcefully attaching (setsockopt(server_fd, sol_socket, so_reuseaddr | so_reuseport, &opt, sizeof(opt))) perror('setsockopt'); address.sin_family="AF_INET;" address.sin_addr.s_addr="INADDR_ANY;" address.sin_port="htons(PORT);" (bind(server_fd, sockaddr*)&address, sizeof(address)) perror('bind (listen(server_fd, 3) perror('listen'); ((new_socket="accept(server_fd," (socklen_t*)&addrlen)) perror('accept'); send(new_socket, close(new_socket); listening shutdown(server_fd, shut_rdwr); pre> <p> <strong>Compiling:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-2.webp" alt="Socket Programming in C/C++"> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-3.webp" alt="Socket Programming in C/C++"> <h2>Uses of Socket Programming</h2> <p>Socket programs are used to communicate between various processes, usually running on different systems. It is mostly used to create a client-server environment. This post provides the various functions used to create the server and client program and an example program.</p> <p>In the example, the client program sends a file name to the server, and the server sends the contents of the file back to the client. Socket programming usually pertains to basic communication protocols like TCP/UDP and raw sockets like ICMP. These protocols have a small communication overhead when compared to underlying protocols such as HTTP/DHCP/SMTP etc.</p> <p> <strong>Some of the basic data communications between the client and server are:</strong> </p> <ul> <li>File Transfer: Sends name and gets a file.</li> <li>Web Page: Sends URL and gets a page.</li> <li>Echo: Sends a message and gets it back.</li> </ul> <h2>Disadvantages</h2> <ul> <li>C++ can establish communication only with the machine requested and not with any other machine on the network.</li> <li>Sockets allow only raw data to be sent. This means that the client and server need mechanisms to interpret the data.</li> </ul> <hr></0)>