![]() |
Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* tclient.c - simple client for TCP/IP sockets */
/* Connect to the server whose hostname or IP is given as an
argument, at port 1234. Once connected, copy everything on
stdin to the socket, then exit. */
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include "sockutil.h" /* some utility functions */
int main(int argc, char ** argv) {
struct sockaddr_in address;
struct in_addr inaddr;
struct hostent * host;
int sock;
if (argc != 2) {
fprintf(stderr, "only a single argument is supported\n");
return 1;
}
/* If the argument can be converted to an IP, do so. If not, try
to look it up in DNS. */
if (inet_aton(argv[1], &inaddr))
host = gethostbyaddr((char *) &inaddr, sizeof(inaddr),
AF_INET);
else
host = gethostbyname(argv[1]);
if (!host) {
/* We can't find an IP number */
herror("error looking up host");
exit(1);
}
if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
die("socket");
address.sin_family = AF_INET;
address.sin_port = htons(1234);
/* Take the first IP address associated with this hostname */
memcpy(&address.sin_addr, host->h_addr_list[0],
sizeof(address.sin_addr));
if (connect(sock, (struct sockaddr *) &address, sizeof(address)))
die("connect");
copyData(0, sock);
close(sock);
return 0;
}