📄 sendto_abcmd.h
字号:
#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h> struct sockaddr_in pin_s; struct hostent *server_host_name_s;void init_port(int port) { bzero(&pin_s,sizeof(pin_s)); pin_s.sin_family=AF_INET; pin_s.sin_addr.s_addr=htonl(INADDR_ANY); pin_s.sin_addr.s_addr=((struct in_addr*)(server_host_name_s->h_addr))->s_addr; pin_s.sin_port=htons(port); }int sendto_ABcmd(char * host_name_s,char *str,int size) { int port1=8060; int port2=8065; int port; char buf[8192]={}; str[size]='\0'; int socket_descriptor; int errorcount1=1,recount1=1; int errorcount2=1,recount2=1; int errorcount3=1,recount3=1; int errorcount4=1,recount4=1; int errorcount5=1,recount5=1; int export_flag=0; if(export_flag==0)/*第一个标志用来标志发,如果第一次切换超过三次.则切换端口.再切换三次*/ {while(errorcount1<=3) { if((server_host_name_s=gethostbyname(host_name_s))==0) errorcount1++; else { port=port1; break; } } if(errorcount1==4) { port=port2;/*真正切换端口*/ export_flag=1; } } init_port(port); if(export_flag==1) {while(recount1<=3) { if((server_host_name_s=gethostbyname(host_name_s))==0)/*解析主机名*/ recount1++; else break; } if(recount1==4) { printf("Error resolving local host\n"); return -1; } } if(export_flag==0) {while(errorcount2<=3) { if((socket_descriptor=socket(AF_INET,SOCK_STREAM,0))==-1)/*套接字创建*/ errorcount2++;/*以下原理同上*/ else break; } if(errorcount2==4) { port=port2; export_flag=1; } } init_port(port); if(export_flag==1) {while(recount2<=3) { if((socket_descriptor=socket(AF_INET,SOCK_STREAM,0))==-1) recount2++; else break; } if(recount2==4) { printf("Error create socket\n"); return -1; } } if(export_flag==0) {while(errorcount3<=3) { if(connect(socket_descriptor,(void*)&pin_s,sizeof(pin_s))==-1)/*1lianjie*/ errorcount3++; else break; } if(errorcount3==4) { port=port2; export_flag=1; } } init_port(port); if(export_flag==1) {while(recount3<=3) { if(connect(socket_descriptor,(void*)&pin_s,sizeof(pin_s))==-1) recount3++; else break; } if(recount3==4) { printf("Error connecting socket\n"); return -1; } } if(export_flag==0) {while(errorcount4<=3) { if(send(socket_descriptor,str,size,0)==-1)/*发送*/ errorcount4++; else break; } if(errorcount4==4) { port=port2; export_flag=1; } } init_port(port); if(export_flag==1) {while(recount4<=3) { if(send(socket_descriptor,str,size,0)==-1) recount4++; else break; } if(recount4==4) { printf("Error in send\n"); return -1; } } if(export_flag==0) {while(errorcount5<=3) { if(recv(socket_descriptor, buf, 8192, 0)==-1)/*接收*/ errorcount5++; else break; } if(errorcount5==4) { port=port2; export_flag=1; } } init_port(port); if(export_flag==1) {while(recount5<=3) { if(recv(socket_descriptor, buf, 8192, 0)==-1) recount5++; else break; } if(recount5==4) { printf("Error in receive\n"); return -1; } }printf("start success!\n"); printf("Response form server:%s\n",buf); close(socket_descriptor); return 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -