//TCP client //Includes #include #include #include #include #include #include #include #include #include #include #include //Function Prototypes void myabort(char *); int main(int argc, char ** argv){ //local variables int n, sent, length; char *ptr; char buf[100]; char tmp[100]; char * eptr; int port; char * Address; struct sockaddr_in Server_Address; int result; unsigned int temp; int mysocket; //Step 0: Process Command line if (argc != 3) myabort ("Usage: client
"); Address = argv[1]; port = (int) strtol(argv[2], &eptr, 10); if (*eptr != '\0') myabort ("Invalid Port Number."); //Step 1: Set up Address Structure bzero(&Server_Address, sizeof(Server_Address)); Server_Address.sin_family = AF_INET; Server_Address.sin_port = htons(port); temp = inet_addr(Address); if (temp != INADDR_NONE){ Server_Address.sin_addr.s_addr = temp; }else{ myabort("Invalid IP Address."); } //Step 2: Create a Socket mysocket = socket(PF_INET, SOCK_STREAM, 0); if (mysocket == -1) myabort("socket()"); //Step 3: Connect to Server result = connect(mysocket, (struct sockaddr *) &Server_Address, sizeof(Server_Address) ); if (result == -1) myabort("connect()"); cout << "Client has connected to Server, type exit to quit" << endl; //erase buf bzero(&buf, sizeof(buf)); // step 4: Communicate with Server //loop until user types exit while ( 1 ){ //read line from user cin.getline(buf, 99); if (cin.fail()) myabort("Invalid String"); length = cin.gcount(); if ( !strcmp(buf, "exit" ) ) break; strcat(buf,"\n"); //write to server sent = 0; ptr = buf; while (sent < length ){ n = write(mysocket, ptr, strlen(ptr) ); if ( n == -1) myabort("write()"); sent += n; ptr += n; } //read from server bzero(&buf, sizeof(buf)); do{ bzero(&tmp, sizeof(tmp)); n = read(mysocket, &tmp, 100); if (n == -1) myabort("read()"); strcat(buf, tmp); } while (tmp[n-1] != '\n'); //print message from server cout << buf; }//end while //Step 5: Close the socket close(mysocket); exit(0); } void myabort(char * msg){ cout << "Error: " << msg << endl; exit(1); }