TCP Server
Connections स्वीकार करें
TCP Server, CoddyKit पर C Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
TCP सर्वर बनाना
TCP सर्वर क्लाइंट की प्रतीक्षा करता है और उनके कनेक्शन स्वीकार करता है। इसका जीवनचक्र है: सॉकेट बनाना, उसे किसी पोर्ट से जोड़ना, सुनना, फिर लूप में कनेक्शन स्वीकार करना।
चरण 1: सॉकेट बनाएँ
IPv4 TCP के लिए स्ट्रीम सॉकेट बनाएँ। ऋणात्मक परिणाम विफलता दर्शाता है।
#include <sys/socket.h>
#include <stdio.h>
int make_server_socket(void) {
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) { perror("socket"); }
return fd;
}चरण 2: पते का पुनः उपयोग होने दें
डिफ़ॉल्ट रूप से सर्वर रुकने के बाद कोई पोर्ट TIME_WAIT में कुछ समय तक बना रहता है और दोबारा शुरू होने से रोकता है। setsockopt से SO_REUSEADDR सेट करें, ताकि आप तुरंत फिर से बाइंड कर सकें।
#include <sys/socket.h>
void allow_reuse(int fd) {
int yes = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes);
}चरण 3: किसी पोर्ट से बाइंड करें
bind() सॉकेट को स्थानीय पते और पोर्ट से जोड़ता है। INADDR_ANY सभी नेटवर्क इंटरफ़ेस पर सुनता है।
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
int bind_port(int fd, unsigned short port) {
struct sockaddr_in addr = {0};
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(port);
if (bind(fd, (struct sockaddr *)&addr, sizeof addr) < 0) {
perror("bind"); return -1;
}
return 0;
}चरण 4: सुनें
listen() सॉकेट को निष्क्रिय (स्वीकार करने के लिए तैयार) के रूप में चिह्नित करता है। backlog तर्क यह तय करता है कि कर्नेल कितने लंबित कनेक्शन कतार में रख सकता है।
#include <sys/socket.h>
#include <stdio.h>
int start_listen(int fd) {
if (listen(fd, 16) < 0) { /* backlog of 16 */
perror("listen"); return -1;
}
return 0;
}चरण 5: कनेक्शन स्वीकार करें
accept() क्लाइंट के कनेक्ट होने तक रुकता है, फिर उस क्लाइंट के लिए एक नया सॉकेट लौटाता है। मूल सॉकेट सुनता रहता है।
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
int accept_one(int listen_fd) {
struct sockaddr_in cli;
socklen_t len = sizeof cli;
int conn = accept(listen_fd, (struct sockaddr *)&cli, &len);
if (conn < 0) perror("accept");
return conn;
}दो सॉकेट, दो भूमिकाएँ
accept के बाद आपके पास दो सॉकेट होते हैं:
- सुनने वाला सॉकेट नए क्लाइंट स्वीकार करता रहता है
- कनेक्शन सॉकेट एक खास क्लाइंट से संचार करता है
उस क्लाइंट का काम पूरा होने पर कनेक्शन सॉकेट बंद करें।
अनुरोध पढ़ना
क्लाइंट का डेटा बफ़र में पढ़ने के लिए recv का उपयोग करें। 0 लौटने का अर्थ है कि क्लाइंट डिस्कनेक्ट हो गया; -1 का अर्थ है त्रुटि।
#include <sys/socket.h>
#include <stdio.h>
void handle(int conn) {
char buf[256];
ssize_t n = recv(conn, buf, sizeof buf - 1, 0);
if (n > 0) { buf[n] = 0; printf("got: %s\n", buf); }
}उत्तर भेजना
send से उत्तर दें। बड़े डेटा के लिए सभी बाइट भेजे जाने तक लूप चलाएँ, क्योंकि एक कॉल बफ़र का केवल कुछ भाग लिख सकती है।
#include <sys/socket.h>
#include <string.h>
void reply(int conn) {
const char *msg = "hello from server\n";
size_t left = strlen(msg);
const char *p = msg;
while (left > 0) {
ssize_t n = send(conn, p, left, 0);
if (n <= 0) break;
p += n; left -= (size_t)n;
}
}स्वीकार लूप
एक सरल पुनरावृत्त सर्वर एक क्लाइंट स्वीकार करता है, उसकी सेवा करता है, उसे बंद करता है और फिर अगले क्लाइंट को स्वीकार करने के लिए लौटता है। यह एक समय में एक ही क्लाइंट संभालता है।
#include <unistd.h>
void serve_loop(int listen_fd, int (*accept_one)(int), void (*handle)(int)) {
for (;;) {
int conn = accept_one(listen_fd);
if (conn < 0) continue;
handle(conn);
close(conn); /* done with this client */
}
}सुव्यवस्थित शटडाउन
सर्वर रुकने पर सुनने वाला सॉकेट बंद करें और लूप को साफ़-सुथरे ढंग से तोड़ने के लिए SIGINT संभालें। कर्नेल संसाधनों को मुक्त करने के लिए डिस्क्रिप्टर हमेशा बंद करें।
त्वरित जाँच
TCP सर्वरों की अपनी समझ जाँचें।
पुनरावृत्ति
आपने चरण-दर-चरण TCP सर्वर बनाया।
- socket, फिर SO_REUSEADDR, फिर bind, listen, accept
acceptहर क्लाइंट के लिए नया सॉकेट लौटाता है- संचार के लिए recv/send, फिर कनेक्शन बंद करें
- क्लाइंट की सेवा के लिए लूप चलाएँ; हर रिटर्न मान जाँचें
एआई शिक्षक के साथ C सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 39
- पाठ
- 144
अक्सर पूछे जाने वाले प्रश्न
क्या “TCP Server” पाठ निःशुल्क है?
हाँ—“TCP Server” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“TCP Server” में मैं क्या सीखूँगा?
Connections स्वीकार करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“TCP Server” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।