?? socket_b.h
字號:
#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h> struct sockaddr_in pin; struct hostent *server_host_name;void init_socket(int port) { bzero(&pin,sizeof(pin)); pin.sin_family=AF_INET; pin.sin_addr.s_addr=htonl(INADDR_ANY); pin.sin_addr.s_addr=((struct in_addr*)(server_host_name->h_addr))->s_addr; pin.sin_port=htons(port); }int socket_comb(char *host_name,char *str){ int port1=8000; int port2=8010; int port; char buf[8192]={}; 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=gethostbyname(host_name))==0) errorcount1++; else { port=port1; break; } } if(errorcount1==4) { port=port2; export_flag=1; } } init_socket(port); if(export_flag==1) {while(recount1<=3) { if((server_host_name=gethostbyname(host_name))==0) recount1++; else break; } if(recount1==4) { close(socket_descriptor); 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_socket(port); if(export_flag==1) {while(recount2<=3) { if((socket_descriptor=socket(AF_INET,SOCK_STREAM,0))==-1) recount2++; else break; } if(recount2==4) { close(socket_descriptor); printf(": Error create socket\n"); return -1; } } if(export_flag==0) {while(errorcount3<=3) { if(connect(socket_descriptor,(void*)&pin,sizeof(pin))==-1) errorcount3++; else break; } if(errorcount3==4) { port=port2; export_flag=1; } } init_socket(port); if(export_flag==1) {while(recount3<=3) { if(connect(socket_descriptor,(void*)&pin,sizeof(pin))==-1) recount3++; else break; } if(recount3==4) { close(socket_descriptor); printf(": Error connecting socket\n"); return -1; } } if(export_flag==0) {while(errorcount4<=3) { if(send(socket_descriptor,str,strlen(str),0)==-1) errorcount4++; else break; } if(errorcount4==4) { port=port2; export_flag=1; } } init_socket(port); if(export_flag==1) {while(recount4<=3) { if(send(socket_descriptor,str,strlen(str),0)==-1) recount4++; else break; } if(recount4==4) { close(socket_descriptor); 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_socket(port); if(export_flag==1) {while(recount5<=3) { if(recv(socket_descriptor, buf, 8192, 0)==-1) recount5++; else break; } if(recount5==4) { close(socket_descriptor); printf(": Error in receive\n"); return -1; } }//check result close(socket_descriptor); return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -