#include #include #include #include #include #include #include #include char *show_address(struct in_addr *myaddr) { if (myaddr) { static char buf[256]; long host; host = ntohl(myaddr->s_addr); sprintf(buf,"%d.%d.%d.%d", (int)(0xff & (host >> 24)), (int)(0xff & (host >> 16)), (int)(0xff & (host >> 8)), (int)(0xff & (host)); return buf; } return 0; } typedef struct _CONNECTION { int connected; int theSocket; char service[256]; char my_inet_addr[256]; short thePort; struct hostent *he; struct sockaddr_in serv_addr; } CONNECTION, *PCONNECTION; struct servent se; int main(int argc, char **argv) { PCONNECTION session; char thehost[256]; strcpy(thehost, argv[1]); session = calloc(sizeof(CONNECTION), 1); strcpy(session->service, "8888"); session->he = gethostbyname(thehost); strcpy(session->my_inet_addr, show_address((struct in_addr *)session->he->h_addr)); se = getservbyname(session->service, "TCP"); if(se) { session->thePort = htons(se->s_port); } else if ((session->thePort = atoi(session->service)) == 0) { fprintf(stderr, "TCP ERROR : Cannot find service\n"); return -1; } if (session->thePort == 0) { fprintf(stderr, "TCP ERROR : No [service] given\n"); return -1; } memset (session->serv_addr, 0, sizeof(session->serv_addr)); session->serv_addr.sin_family = AF_INET; session->serv_addr.sin_addr.s_addr = inet_addr(session->my_inet_addr); session->serv_addr.sin_port = htons(session->thePort); if ((session->theSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "TCP ERROR : Could not open socket\n"); return -1; } if (connect(session->theSocket, (struct sockaddr *) csession->serv_addr, sizeof(session->serv_addr)) < 0) { fprintf(stderr, "TCP ERROR : Could not connect\n"); close(session->theSocket); return -1; } session->connected++; write(session->theSocket, (void *) '1', 1); close(session->theSocket); free(session); return 0; }