赞
踩
利用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 LINE 10 //创建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,不然无法成功连接。或者改为本地回环地址。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。