做盗链网站,网络营销策略案例分析,已被网站管理员设置拦截,开关网站建设文章目录 4.15 TCP通信实现#xff08;服务器端#xff09;4.16 TCP通信实现#xff08;客户端#xff09; 4.15 TCP通信实现#xff08;服务器端#xff09;
// TCP 通信的服务器端// TCP 通信的服务器端
#include stdio.h
#include arpa/inet.h
#incl… 文章目录 4.15 TCP通信实现服务器端4.16 TCP通信实现客户端 4.15 TCP通信实现服务器端
// TCP 通信的服务器端// TCP 通信的服务器端
#include stdio.h
#include arpa/inet.h
#include unistd.h
#include string.h
#include stdlib.hint main(){//1、创建socket用于监听int lfd socket(AF_INET,SOCK_STREAM,0);if(lfd -1){perror(socket);exit(0);}//2、绑定struct sockaddr_in saddr;saddr.sin_family AF_INET; //协议族//把点分十进制IP地址转换成int 而且是网络字节序的//saddr-sin_addr.s_addr 本质是一个长整型的变量 结构体套结构体//第三个参数是传出参数也就是转换好的void* 直接就给了saddr-sin_addr.s_addrinet_pton(AF_INET,192.168.65.129,saddr.sin_addr.s_addr); //p:point 点分十进制/*saddr-sin_addr.s_addr 0; saddr-sin_addr.s_addr INADDR_ANY; INADDR_ANY这个宏就是00.0.0.0 表示任意地址 比如一台主机有两个网卡两个都绑定客户端无论用哪一个IP地址 都可以访问到这台主机*///saddr-sin_port 9999; 这是主机字节序的9999 要转成网络字节序saddr.sin_port htons(9999);int ret bind(lfd,(struct sockaddr*)saddr,sizeof(saddr));if(ret -1){perror(bind);exit(0);}//3、监听ret listen(lfd,8);if(ret -1){perror(listen);exit(0);}//4、接收客户端连接struct sockaddr_in clientaddr;socklen_t len sizeof(clientaddr);int cfd accept(lfd,(struct sockaddr*)clientaddr,len);if(cfd -1){perror(accept);exit(0);}//打印客户端信息//把获取到的网络字节序IP和端口转换成主机字节序char clientIp[16];inet_ntop(AF_INET,clientaddr.sin_addr.s_addr,clientIp,sizeof(clientIp));unsigned short clientPort ntohs(clientaddr.sin_port);printf(client IP is: %s, port is %d: \n,clientIp,clientPort);//5、通信//获取客户端数据char recvBuf[1024] {0};len read(cfd,recvBuf,sizeof(recvBuf));if(len -1){perror(accept);exit(0);}else if(len 0){printf(recv client data %s\n,recvBuf);}else if(len 0){//表示客户端关闭连接printf(client close...);}//给客户端发送数据char* data hello,i am server;write(cfd,data,strlen(data));//6、关闭文件描述符close(cfd);close(lfd);return 0;
}
4.16 TCP通信实现客户端
// TCP 通信的服务器端
#include stdio.h
#include arpa/inet.h
#include unistd.h
#include string.h
#include stdlib.hint main(){//1、创建socket用于监听int lfd socket(AF_INET,SOCK_STREAM,0);if(lfd -1){perror(socket);exit(0);}//2、绑定struct sockaddr_in saddr;saddr.sin_family AF_INET; //协议族//把点分十进制IP地址转换成int 而且是网络字节序的//saddr-sin_addr.s_addr 本质是一个长整型的变量 结构体套结构体//第三个参数是传出参数也就是转换好的void* 直接就给了saddr-sin_addr.s_addrinet_pton(AF_INET,192.168.65.129,saddr.sin_addr.s_addr); //p:point 点分十进制/*saddr-sin_addr.s_addr 0; saddr-sin_addr.s_addr INADDR_ANY; INADDR_ANY这个宏就是00.0.0.0 表示任意地址 比如一台主机有两个网卡两个都绑定客户端无论用哪一个IP地址 都可以访问到这台主机*///saddr-sin_port 9999; 这是主机字节序的9999 要转成网络字节序saddr.sin_port htons(9999);int ret bind(lfd,(struct sockaddr*)saddr,sizeof(saddr));if(ret -1){perror(bind);exit(0);}//3、监听ret listen(lfd,8);if(ret -1){perror(listen);exit(0);}//4、接收客户端连接struct sockaddr_in clientaddr;socklen_t len sizeof(clientaddr);int cfd accept(lfd,(struct sockaddr*)clientaddr,len);if(cfd -1){perror(accept);exit(0);}//打印客户端信息//把获取到的网络字节序IP和端口转换成主机字节序char clientIp[16];inet_ntop(AF_INET,clientaddr.sin_addr.s_addr,clientIp,sizeof(clientIp));unsigned short clientPort ntohs(clientaddr.sin_port);printf(client IP is: %s, port is %d: \n,clientIp,clientPort);//5、通信//获取客户端数据char recvBuf[1024] {0};len read(cfd,recvBuf,sizeof(recvBuf));if(len -1){perror(accept);exit(0);}else if(len 0){printf(recv client data %s\n,recvBuf);}else if(len 0){//表示客户端关闭连接printf(client close...);}//给客户端发送数据char* data hello,i am server;write(cfd,data,strlen(data));//6、关闭文件描述符close(cfd);close(lfd);return 0;
}