/* ** Echo client; demonstrates internet sockets */ #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int s, t, len, portno; struct sockaddr_in remote; struct hostent *server; char str[100]; if(argc < 3){ fprintf(stderr, "Format: \n"); exit(1); } /*get server address and port number*/ if((server = gethostbyname(argv[1])) == NULL){ fprintf(stderr, "Host %s not found\n", argv[1]); exit(1); } portno = atoi(argv[2]); /*create socket descriptor*/ if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } /*construct server address*/ bzero((char *)&remote, sizeof(remote)); remote.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&remote.sin_addr.s_addr, server->h_length); remote.sin_port = htons(portno); /*Attempt to connect to server*/ printf("Trying to connect...\n"); if (connect(s, (struct sockaddr *)&remote, sizeof(remote)) < 0) { perror("connect"); exit(1); } printf("Connected.\n"); /*Accept data from client, and send it back*/ while(printf("> "), fgets(str, 100, stdin), !feof(stdin)) { if (write(s, str, strlen(str)) == -1) { perror("write"); exit(1); } if ((t=read(s, str, 100)) > 0) { str[t] = '\0'; printf("echo> %s", str); } else { if (t < 0) perror("recv"); else printf("Server closed connection\n"); exit(1); } } close(s); return 0; }