int main(int argc, char **argv) { if (argc != 3 && argc != 4) { printf("Usage: %s ip server_port [local_port]\n", argv[0]); exit(1); } printf("Hd udp client\n"); init(); struct sockaddr_in addr; int sock; if ( (sock=socket(AF_INET, SOCK_DGRAM, 0)) <0) { perror("socket"); exit(1); } addr.sin_family = AF_INET; if(argc == 4) addr.sin_port = htons(atoi(argv[3])); else addr.sin_port = htons(3000); addr.sin_addr.s_addr = INADDR_ANY; if(bind(sock, (struct sockaddr *)&addr, sizeof(addr))<0) { perror("bind error"); exit(1); } pid_t recv_pid = fork(); if(recv_pid == 0) { printf("son process\n"); recv_process(sock); } else { addr.sin_family = AF_INET; addr.sin_port = htons(atoi(argv[2])); struct hostent *hostinfo; // char buff[512]="{'gwid':'1234567890'}"; while (1) { // gets(buff); hostinfo = gethostbyname(argv[1]); while(hostinfo == NULL) { sleep(5); hostinfo = gethostbyname(argv[1]); } addr.sin_addr.s_addr = *(unsigned int *)hostinfo->h_addr_list[0]; int n; n = sendto(sock, send_buff, 512, 0, (struct sockaddr *)&addr, sizeof(addr)); if (n < 0) { perror("sendto"); close(sock); break; } sleep(PING_TIME); } } close(sock); return 0; }
int main(){ recv_process(config_with_ctl,send_ok,NULL); }