/* Socket Client: Compilation: gcc client.c -o client to run: client [local_port] [remote_host] [remote_port] **** PS: The clients must be running before executing the server ***** */ #include #include #include #include #include #include #include #include #define SIZE 1000 // vector size //############################################################################################ int main(int argc, char* argv[]) { int S0, S1, loc_port, // local port rem_port, // remote port *vector, dsr; // descriptor of remote socket char *host; struct sockaddr_in loc_addr; // internet address struct sockaddr_in rem_addr; // internet address struct hostent *phost; // pointer to host entry structure if(argc < 3){ printf("Erro uso correto:\n"); printf(" %s \n\n", argv[0]); exit(1); } //clean structure memset((char *)&rem_addr,0,sizeof(rem_addr)); vector = ( int * ) malloc (sizeof ( int ) * SIZE); // Local Socket //fill out the socket's address information loc_port = atoi(argv[1]); loc_addr.sin_family = AF_INET; loc_addr.sin_addr.s_addr = htonl(INADDR_ANY); loc_addr.sin_port = htons(loc_port); // Remote machine host host = argv[2]; phost = gethostbyname(host); // Remote Socket //fill out the socket's address information rem_port = atoi(argv[3]); rem_addr.sin_family = AF_INET; rem_addr.sin_port = htons(rem_port); dsr = socket (AF_INET, SOCK_STREAM, 0); memcpy(&rem_addr.sin_addr, phost->h_addr, phost->h_length); // get the host name gethostname(host, 50); // create the socket S0 = socket(AF_INET, SOCK_STREAM, 0); if (S0 < 0) { perror("Creating local stream socket"); exit(1); } //bind the socket into its address if (bind(S0, (struct sockaddr*) &loc_addr, sizeof(loc_addr)) < 0) { perror("Binding stream socket"); exit(1); } // Listen for conetions listen(S0, 1); // accept a connection S1 = accept(S0, (struct sockaddr*) 0, (int*) 0); if (dsr < 0) { perror("Creating remote stream socket"); exit(1); } //make the connection if (connect(dsr, (struct sockaddr*) &rem_addr, sizeof(rem_addr)) < 0) { perror("Conecting stream socket"); exit(1); } //-------------------------------------------------------------------------------------------- // receive and send messages recv(S1, vector, SIZE, 0); printf ("Message passing on node [%s]\n", host); send(dsr, vector, SIZE , 0); //-------------------------------------------------------------------------------------------- //close the connection close(dsr); close(S0); close(S1); } //############################################################################################