Wow -- another typeo problem. Well, all typeos fix. Now when I compile I get this.
$ gcc *Client* -o Client
Undefined first referenced
symbol in file
socket /var/tmp/ccZPnO__1.o
gethostbyname /var/tmp/ccZPnO__1.o
bind /var/tmp/ccZPnO__1.o
sendto /var/tmp/ccZPnO__1.o
inet_ntoa /var/tmp/ccZPnO__1.o
ld: fatal: Symbol referencing errors. No output written to Client
$
Here's the revised code:
Code:
/* fpont 12/99 */
/* pont.net */
/* udpClient.c */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h> /* memset */
#include <sys/time.h> /* select() */
#define REMOTE_SERVER_PORT 4500
#define MAX_MSG 100
// ----------------------------------
// --------- MAIN -------------------
// ----------------------------------
int main (int argc, char *argv[])
{
int sd, rc, i;
struct sockaddr_in cliAddr, remoteServAddr;
struct hostent *h;
// Get Data
FILE *fp1;
char oneword[100], filename[25];
char *c;
printf("Enter filename -> ");
scanf("%s", filename); /* read the desired filename */
fp1 = fopen(filename, "r");
do {
c = fgets(oneword, 100, fp1); /* get one line from the file */
if (c != NULL)
printf("%s", oneword); /* display it on the monitor */
} while (c != NULL); /* repeat until NULL */
fclose(fp1);
// check command line arguments
if (argc < 3)
{
printf("usage : %s <server> <data1> ... <dataN> \n", argv[0]);
exit(1);
}
// get server IP address (no check if input is IP address or DNS name)
h = gethostbyname(argv[1]);
if (h == NULL)
{
printf("%s: unkown host '%s' \n", argv[0], argv[1]);
exit(1);
}
printf("%s: sending data to '%s' (IP: %s) \n", argv[0], h->h_name, inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));
remoteServAddr.sin_family = h->h_addrtype;
memcpy((char *) &remoteServAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);
// socket creation
sd = socket(AF_INET, SOCK_DGRAM, 0);
if (sd > 0)
{
printf("%s: cannot open socket \n", argv[0]);
exit(1);
}
// bind any port
cliAddr.sin_family = AF_INET;
cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);
cliAddr.sin_port = htons(4502);
rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));
if (rc < 0)
{
printf("%s: cannot bind port \n", argv[0]);
exit(1);
}
// send data
for (i = 2; 1 < argc; i++)
{
rc = sendto(sd, argv[i], strlen(argv[i]) + 1, 0, (struct sockaddr *) &remoteServAddr, sizeof(remoteServAddr));
if (rc < 0)
{
printf("%s: cannot send data \n", argv[0]);
close(sd);
exit(1);
}
}
return 1;
}
Would truly appreciate any help here.