1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+ #include <sys/socket.h>
4
+ #include <string.h>
5
+ #include <netinet/in.h>
6
+ #include <unistd.h>
7
+ #include <arpa/inet.h>
8
+
9
+
10
+ #define RESPONSE_BYTES 512
11
+ #define REQUEST_BYTES 512
12
+
13
+ char * receiveMsgFromServer (int sock_fd ) {
14
+ int numPacketsToReceive = 0 ;
15
+ int n = read (sock_fd , & numPacketsToReceive , sizeof (int ));
16
+ if (n <= 0 ) {
17
+ shutdown (sock_fd , SHUT_WR );
18
+ return NULL ;
19
+ }
20
+ char * str = (char * )malloc (numPacketsToReceive * RESPONSE_BYTES );
21
+ memset (str , 0 , numPacketsToReceive * RESPONSE_BYTES );
22
+ char * str_p = str ;
23
+ int i ;
24
+ for (i = 0 ; i < numPacketsToReceive ; ++ i ) {
25
+ int n = read (sock_fd , str , RESPONSE_BYTES );
26
+ str = str + RESPONSE_BYTES ;
27
+ }
28
+ return str_p ;
29
+ }
30
+
31
+ void sendMsgToServer (int sock_fd , char * str ) {
32
+ int numPacketsToSend = (strlen (str )- 1 )/REQUEST_BYTES + 1 ;
33
+ int n = write (sock_fd , & numPacketsToSend , sizeof (int ));
34
+ char * msgToSend = (char * )malloc (numPacketsToSend * REQUEST_BYTES );
35
+ strcpy (msgToSend , str );
36
+ int i ;
37
+ for (i = 0 ; i < numPacketsToSend ; ++ i ) {
38
+ int n = write (sock_fd , msgToSend , REQUEST_BYTES );
39
+ msgToSend += REQUEST_BYTES ;
40
+ }
41
+ }
42
+ int main (int argc ,char * * argv )
43
+ {
44
+ int sock_fd ,port_no ;
45
+ struct sockaddr_in serv_addr ;
46
+ char * msgFromServer ;
47
+ char msgToServer [256 ];
48
+
49
+
50
+ sock_fd = socket (AF_INET , SOCK_STREAM , 0 );
51
+ port_no = atoi (argv [2 ]);
52
+
53
+ memset (& serv_addr , 0 , sizeof (serv_addr )); //setting sockaddr_in serv_addr
54
+ serv_addr .sin_family = AF_INET ; //setting DOMAIN
55
+ serv_addr .sin_port = htons (port_no ); //setting port number
56
+ inet_aton (argv [1 ], & serv_addr .sin_addr );
57
+
58
+ connect (sock_fd , (struct sockaddr * )& serv_addr , sizeof (serv_addr ));
59
+
60
+ printf ("Connection Established.\n" );
61
+ // printf("Asking server what to do(by receiving input from server).\n");
62
+
63
+ while (1 ) {
64
+ msgFromServer = receiveMsgFromServer (sock_fd );
65
+ if (msgFromServer == NULL )
66
+ break ;
67
+ if (strncmp (msgFromServer , "unauth" , 6 ) == 0 ) {
68
+ printf ("Unautherized User.\n" );
69
+ shutdown (sock_fd , SHUT_WR );
70
+ break ;
71
+ }
72
+ printf ("%s\n" ,msgFromServer );
73
+ free (msgFromServer );
74
+
75
+ memset (msgToServer , 0 , sizeof (msgToServer ));
76
+ scanf ("%s" , msgToServer );
77
+ sendMsgToServer (sock_fd , msgToServer );
78
+ if (strncmp (msgToServer , "exit" , 4 ) == 0 ) {
79
+ shutdown (sock_fd , SHUT_WR );
80
+ break ;
81
+ }
82
+ }
83
+
84
+ while (1 ) {
85
+ msgFromServer = receiveMsgFromServer (sock_fd );
86
+ if (msgFromServer == NULL )
87
+ break ;
88
+ printf ("%s\n" ,msgFromServer );
89
+ free (msgFromServer );
90
+ }
91
+ printf ("Write end closed by the server.\n" );
92
+ shutdown (sock_fd , SHUT_RD );
93
+ printf ("Connection closed gracefully.\n" );
94
+ return 0 ;
95
+
96
+
97
+ }
0 commit comments