In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-04-02 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Servers >
Share
Shulou(Shulou.com)06/01 Report--
In this issue, the editor will bring you about how to write a TCP in C language. The article is rich in content and analyzes and narrates it from a professional point of view. I hope you can get something after reading this article.
If we want to write a server and client ourselves, we need to master some network programming skills. Personally, the most important thing in network programming is socket (socket).
Socket (socket): to put it simply, socket is used to describe IP addresses and ports. It is a handle to a communication chain that can be used to communicate between different virtual machines or different computers.
TCP protocol
TCP protocol: a connection-oriented, reliable, byte-stream-based transport layer communication protocol defined by RFC 793of IETF. In the simplified computer network OSI model, it performs the functions specified by the fourth transport layer.
Key words: three-way handshake, reliable, based on byte flow.
Some friends may ask, is TCP as simple as that? Of course not. As a very important transport protocol, TCP has a lot of detailed knowledge. I'm afraid it's not enough to talk about it in detail. However, in this article, we only need to know a few of his keyword features, we can well understand the following.
TCP server-side and client-side running process
As shown in the figure, this is a complete flow chart of the TCP server client. In fact, I personally think that the program, no matter which language is the same, the core lies in the design of the algorithm and the call of the function. So what do the functions in the diagram mean?
1. Create socket
Socket is a structure that is created in the kernel
Sockfd=socket (AF_INET,SOCK_STREAM,0); / / AF_INT:ipv4, SOCK_STREAM:tcp protocol
two。 Call the bind function
Bind socket to addresses (including ip, port).
A structure address needs to be defined to convert the host byte order of port into a network byte order.
Struct sockaddr_in myaddr; / / address structure
Bind function
Bind (sockfd, (struct sockaddr*) & myaddr,sizeof (serveraddr))
3.listen snooping to queue received client connections
Listen (sockfd,8) / / the second parameter is the queue length
4. Call the accept function, get the request from the queue, and return the socket descriptor
If there is no request, it will block until the connection is obtained
Int fd=accept (sockfd, NULL,NULL); / / default parameters are used here.
5. Call read/write for two-way communication
6. Close the socket returned by accept
Close (scokfd)
The complete code is released below:
/ * Server * / # include # include int main () {int sockfd = socket (AF_INET, SOCK_STREAM, 0); / / create socket if (sockfd
< 0) { perror("socket"); return -1; } //创建失败的错误处理 printf("socket..............\n"); //成功则打印"socket。。。。" struct sockaddr_in myaddr; //创建"我的地址"结构体 memset(&myaddr, 0, sizeof(myaddr)); //对内存清零(保险起见) myaddr.sin_family = AF_INET; //选择IPV4地址类型 myaddr.sin_port = htons(8888); //选择端口号 myaddr.sin_addr.s_addr = inet_addr("192.168.3.169"); //选择IP地址 if (0 >Bind (sockfd, (struct sockaddr*) & myaddr, sizeof (myaddr)) / / bind socket {perror ("bind"); return-1;} printf ("bind.\ n"); if (0 > listen (sockfd, 8)) / / call listen to listen on the specified port {perror ("listen"); return-1 } printf ("listen.\ n"); int connfd = accept (sockfd, NULL, NULL); / / get the request if (connfd) from the message queue using accept
< 0) { perror("accept"); return -1; } printf("accept..............\n"); char buf[100];//定义一个数组用来存储接收到的数据 int ret; while (1) { memset(buf, 0, sizeof(buf)); ret = read(connfd, buf, sizeof(buf)); if (0 >Ret) {perror ("read"); break;} / / execute while loop to read data when else if (0 = = ret) {printf ("write close!\ n"); break;} printf ("recv:"); fputs (buf, stdout) / / print the received data} close (sockfd); / / close the socket close (connfd); / / disconnect return 0;} / * client * / (the specific function is the same as the server, so no more comments) # include # include int main () {int sockfd If (0 > (sockfd = socket (AF_INET, SOCK_STREAM, 0)) {perror ("socket"); return-1;} printf ("socket.\ n"); struct sockaddr_in srv_addr; memset (& srv_addr, 0, sizeof (srv_addr)); srv_addr.sin_family = AF_INET Srv_addr.sin_port = htons (8888); srv_addr.sin_addr.s_addr = inet_addr ("192.168.3.169"); if (0 > connect (sockfd, (struct sockaddr*) & srv_addr, sizeof (srv_addr)) {perror ("connect"); return-1 / / exit / / pthread_exit} printf ("connect.\ n"); char buf [100]; int ret; while (1) {printf ("send:"); fgets (buf, sizeof (buf), stdin); ret = write (sockfd, buf, sizeof (buf)) If (ret < 0) {perror ("write"); break;} if (strncmp (buf, "quit", 4) = = 0) break;} close (sockfd); return 0 } the above is the editor for you to share how to write a TCP in C language, if you happen to have similar doubts, you might as well refer to the above analysis to understand. If you want to know more about it, you are welcome to follow the industry information channel.
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.