#include #include #include "TCPClientUtility.h" #include "Practical.h" int main(int argc, char **argv) { if (argc < 3 || argc > 4) { DieWithUserMessage( "Parameter(s)", " []" ); } char *server = argv[1]; char *echo_str = argv[2]; char *service = (argc == 4) ? argv[3] : "echo"; int sock = setup_tcp_client_socket(server, service); if (sock < 0) { DieWithUserMessage( "setup_tcp_client_socket() failed", "Unable to connect" ); } const size_t echo_str_len = strlen(echo_str); ssize_t num_bytes = send(sock, echo_str, echo_str_len, 0); if (num_bytes < 0) { DieWithSystemMessage("send() failed"); } else if ((size_t) num_bytes != echo_str_len) { DieWithUserMessage("send()", "Sent unexpected amount of bytes"); } unsigned int total_bytes_rcvd = 0; fputs("Received: ", stdout); while (total_bytes_rcvd < echo_str_len) { char buf[BUFSIZE]; num_bytes = recv(sock, buf, BUFSIZE - 1, 0); if (num_bytes < 0) { DieWithSystemMessage("recv() failed"); } else if (num_bytes == 0) { DieWithUserMessage("recv()", "Connection closed prematurely"); } total_bytes_rcvd += num_bytes; buf[num_bytes] = '\0'; fputs(buf, stdout); } fputc('\n', stdout); close(sock); return 0; }