300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【TCP网络编程】C语言实现TCP服务器和客户端之间的通信(linux)

【TCP网络编程】C语言实现TCP服务器和客户端之间的通信(linux)

时间:2021-03-11 07:58:31

相关推荐

【TCP网络编程】C语言实现TCP服务器和客户端之间的通信(linux)

功能描述

利用TCP网络通信实现客户端服务器的通信

服务器代码

server.c

#include<stdio.h>#include<sys/socket.h>#include<sys/types.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include <arpa/inet.h>#define LINE10//创建TCP服务器实现服务器和客户端的通信int main(){//创建socket套接字int serfd=0;serfd=socket(AF_INET,SOCK_STREAM,0);if(serfd<0){perror("socket failed");return -1;}printf("socket ok!\n");//通过调用bind绑定IP地址和端口号int ret=0;struct sockaddr_in seraddr={0};seraddr.sin_family=AF_INET;seraddr.sin_port=htons(8888);seraddr.sin_addr.s_addr=inet_addr("192.168.59.131");ret=bind(serfd,(struct sockaddr *)&seraddr,sizeof(seraddr));if(ret<0){perror("bind failed");close(serfd);return -1;}printf("bind success\n");//通过调用listen将套接字设置为监听模式int lis=0;lis=listen(serfd,LINE);if(lis<0){perror("listen failed");close(serfd);return -1;}printf("listen success\n");//服务器等待客户端连接中,游客户端连接时调用accept产生一个新的套接字int confd=0;socklen_t addrlen;struct sockaddr_in clientaddr={0};addrlen=sizeof(clientaddr);confd=accept(serfd,(struct sockaddr *)&clientaddr,&addrlen);if(confd<0){perror("accept failed");close(serfd);return -1;}printf("connect success!\n");printf("ip=%s,port=%u\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));//调用recv接收客户端的消息while(1){int rev=0;int sed=0;char buf[1024]={0};rev=recv(confd,buf,sizeof(buf),0);if(rev>0){printf("本次收到了%d个字节\n",rev);printf("receive: %s\n",buf);}memset(buf,0,sizeof(buf));gets(buf);sed=send(confd,buf,strlen(buf),0);if(sed<0){perror("send failed");close(serfd);return -1;}printf("send success\n");}close(confd);close(serfd);return 0;}

客户端代码

client.c

#include<stdio.h>#include<sys/socket.h>#include<sys/types.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>//创建TCP服务器实现服务器和客户端的通信int main(){//创建socket套接字int clientfd=0;clientfd=socket(AF_INET,SOCK_STREAM,0);if(clientfd<0){perror("socket failed");return -1;}printf("socket ok!\n");//客户端可以不绑定IP地址和端口号,系统会随机分配//客户端连接服务器int ret=0;int addrlen=0;struct sockaddr_in seraddr={0};seraddr.sin_family=AF_INET;seraddr.sin_port=htons(8888);seraddr.sin_addr.s_addr=inet_addr("192.168.59.131");addrlen=sizeof(seraddr);ret=connect(clientfd,(struct sockaddr *)&seraddr,addrlen);if(ret<0){perror("connect failed");close(clientfd);return -1;}printf("connect success\n");//调用send向服务器发送消息while(1){int sed=0;int rev=0;char buf[1024]={0};gets(buf);sed=send(clientfd,buf,strlen(buf),0);if(sed<0){perror("send failed");close(clientfd);return -1;}printf("send success\n");memset(buf,0,sizeof(buf));rev=recv(clientfd,buf,sizeof(buf),0);if(rev>0){printf("本次收到了%d个字节\n",rev);printf("receive: %s\n",buf);}}close(clientfd);return 0;}

注意

使用时需要将其中的IP地址换成自己的IP,不然无法成功连接。或者改为本地回环地址。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。