69 lines
1.6 KiB
C
Executable File
69 lines
1.6 KiB
C
Executable File
/* Source: Peterson & Davie (2007), Computer Networks, a Systems Approach,
|
||
* 4th ed., Morgan Kaufmann, p. 34-35.
|
||
* Included stdlib.h, string.h, and strings.h so it compiles on Linux.
|
||
* Changed port from 5432 (postgresql) to 7701 (unassigned).
|
||
* - JLND Feb 7 2009
|
||
*/
|
||
#include<unistd.h>
|
||
#include <unistd.h>
|
||
#include <stdlib.h>
|
||
#include <string.h>
|
||
#include <strings.h>
|
||
#include <stdio.h>
|
||
#include <sys/types.h>
|
||
#include <sys/socket.h>
|
||
#include <netinet/in.h>
|
||
#include <netdb.h>
|
||
#define SERVER_PORT 7701
|
||
#define MAX_LINE 256
|
||
|
||
int
|
||
main(int argc, char * argv[])
|
||
{
|
||
FILE *fp;
|
||
struct hostent *hp;
|
||
struct sockaddr_in sin;
|
||
char *host;
|
||
char buf[MAX_LINE];
|
||
int s;
|
||
int len;
|
||
|
||
if (argc==2) {
|
||
host = argv[1];
|
||
}
|
||
else {
|
||
fprintf(stderr, "usage: simplex-talk host\n");
|
||
exit(1);
|
||
}
|
||
|
||
/* translate host name into peer’s IP address */
|
||
hp = gethostbyname(host);
|
||
if (!hp) {
|
||
fprintf(stderr, "simplex-talk: unknown host: %s\n", host);
|
||
exit(1);
|
||
}
|
||
|
||
/* build address data structure */
|
||
bzero((char *)&sin, sizeof(sin));
|
||
sin.sin_family = AF_INET;
|
||
bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
|
||
sin.sin_port = htons(SERVER_PORT);
|
||
|
||
/* active open */
|
||
if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
|
||
perror("simplex-talk: socket");
|
||
exit(1);
|
||
}
|
||
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
|
||
perror("simplex-talk: connect");
|
||
close(s);
|
||
exit(1);
|
||
}
|
||
|
||
/* main loop: get and send lines of text */
|
||
while (fgets(buf, sizeof(buf), stdin)) {
|
||
buf[MAX_LINE-1] = '\0';
|
||
len = strlen(buf) + 1;
|
||
send(s, buf, len, 0);
|
||
}
|
||
} |