-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathgiven-client.c
72 lines (68 loc) · 2.12 KB
/
given-client.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define BUFFER_SIZE 256
void error(const char *message){
perror(message);
exit(0);
}
int main(int argc, char *argv[]){
int SocketFileDescriptor, PortNumber, Result;
struct sockaddr_in ServerAddress;
struct hostent *Server;
char Buffer[BUFFER_SIZE];
if(3 > argc){
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
PortNumber = atoi(argv[2]);
if((1 > PortNumber)||(65535 < PortNumber)){
fprintf(stderr,"Port %d is an invalid port number\n",PortNumber);
exit(0);
}
// Create TCP/IP socket
printf("Creating socket\n");
SocketFileDescriptor = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(0 > SocketFileDescriptor){
error("ERROR opening socket");
}
// Convert/resolve host name
Server = gethostbyname(argv[1]);
if(NULL == Server){
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
// Setup ServerAddress data structure
bzero((char *) &ServerAddress, sizeof(ServerAddress));
ServerAddress.sin_family = AF_INET;
bcopy((char *)Server->h_addr, (char *)&ServerAddress.sin_addr.s_addr, Server->h_length);
ServerAddress.sin_port = htons(PortNumber);
// Connect to server
if(0 > connect(SocketFileDescriptor, (struct sockaddr *)&ServerAddress, sizeof(ServerAddress))){
error("ERROR connecting");
}
while(1) { // Is this not the way to go? ):
printf("Please enter the message: ");
bzero(Buffer, BUFFER_SIZE);
fgets(Buffer, BUFFER_SIZE-1, stdin);
// Write data to server
Result = write(SocketFileDescriptor, Buffer, strlen(Buffer));
if(0 > Result){
error("ERROR writing to socket");
}
bzero(Buffer, BUFFER_SIZE);
// Read data from server
Result = read(SocketFileDescriptor, Buffer, BUFFER_SIZE-1);
if(0 > Result){
error("ERROR reading from socket");
}
printf("%s\n",Buffer);
}
close(SocketFileDescriptor);
return 0;
}