├── README.md
├── Send_Structure_for_Authentication_Client
├── Send_Structure_for_Authentication_Server
├── tcpClient.c
└── tcpServer.c
/README.md:
--------------------------------------------------------------------------------
1 | # Multiple-Client-Server-Program-in-C-using-fork
2 | A simple tcp client server application that describes the communication between the client and a server. The server is a simple echo sever that can handle multiple client using fork.
3 |
4 | An echo server is a server that send back the same message that the client has send the server.
5 | Like:
6 |
7 | Client send - abc
8 | Server recv - abc
9 |
--------------------------------------------------------------------------------
/Send_Structure_for_Authentication_Client:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | struct myStruct{
8 | char name[10];
9 | int userId;
10 | char password[10];
11 | };
12 | int main(){
13 | int sockfd;
14 | struct sockaddr_in server;
15 | sockfd = socket(AF_INET, SOCK_STREAM, 0);
16 | if(sockfd==-1){
17 | printf("Socket not created\n");
18 | exit(0);
19 | }else{
20 | printf("Socket Created\n");
21 | }
22 | server.sin_family = AF_INET;
23 | server.sin_port = htons(3050);
24 | server.sin_addr.s_addr = INADDR_ANY;
25 |
26 |
27 | int x=connect(sockfd, (struct sockaddr *)&server, sizeof(server));
28 | if(x==-1){
29 | printf("Connection Failure\n");
30 | exit(0);
31 | }
32 |
33 | struct myStruct myst;
34 | printf("Enter userId : ");
35 | scanf("%d",&myst.userId);
36 | printf("Enter password : ");
37 | scanf("%s",myst.password);
38 |
39 |
40 | send(sockfd,&myst,sizeof(myst),0);
41 |
42 | char message[20];
43 | recv(sockfd, message, sizeof(message), 0);
44 |
45 | printf("%s",message);
46 |
47 |
48 | close(sockfd);
49 | return 0;
50 | }
51 |
--------------------------------------------------------------------------------
/Send_Structure_for_Authentication_Server:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | struct myStruct{
8 | char name[10];
9 | int userId;
10 | char password[10];
11 | };
12 | int main(){
13 | int sockfd;
14 | struct sockaddr_in server,client;
15 |
16 | sockfd = socket(AF_INET, SOCK_STREAM, 0);
17 | if(sockfd==-1){
18 | printf("Socket not created\n");
19 | exit(0);
20 | }else{
21 | printf("Socket Created\n");
22 | }
23 |
24 | server.sin_family = AF_INET;
25 | server.sin_port = htons(3050);
26 | server.sin_addr.s_addr = INADDR_ANY;
27 | //INET_ADDR("127.0.0.1")
28 | int x=bind(sockfd, (struct sockaddr *)&server, sizeof(server));
29 | if(x==-1){
30 | printf("bind Failure\n");
31 | exit(0);
32 | }else{
33 | printf("bind Successful\n");
34 | }
35 |
36 | listen(sockfd, 5);
37 | int s=sizeof(client);
38 |
39 | struct myStruct st[5]={{"nikhil1",1,"nikhil1"},
40 | {"nikhil2",2,"nikhil2"},
41 | {"nikhil3",3,"nikhil3"},
42 | {"nikhil14",4,"nikhil4"},
43 | {"nikhil5",5,"nikhil15"}};
44 | struct myStruct myst;
45 | int fd1=accept(sockfd, (struct sockaddr *)&client, &s);
46 |
47 | recv(fd1, &myst, sizeof(myst), 0);
48 | //recvfrom(sockfd,buff,100,0,(struct sockaddr *)&client,&s);
49 |
50 | printf("userId received :%d\n",myst.userId);
51 | printf("password received :%s\n",myst.password);
52 | int fl=1;
53 | for(int i=0;i<5;i++){
54 | if(myst.userId==st[i].userId && strcmp(myst.password,st[i].password)==0){
55 | fl=0;
56 | break;
57 | }
58 | }
59 |
60 |
61 | if(fl==0){
62 | char message[20]="Login Successful\n";
63 | send(fd1, message, sizeof(message), 0);
64 | }else{
65 | char message[20]="Login Failure\n";
66 | send(fd1, message, sizeof(message), 0);
67 | }
68 |
69 |
70 | close(sockfd);
71 | return 0;
72 | }
73 |
--------------------------------------------------------------------------------
/tcpClient.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 |
10 | #define PORT 4444
11 |
12 | int main(){
13 |
14 | int clientSocket, ret;
15 | struct sockaddr_in serverAddr;
16 | char buffer[1024];
17 |
18 | clientSocket = socket(AF_INET, SOCK_STREAM, 0);
19 | if(clientSocket < 0){
20 | printf("[-]Error in connection.\n");
21 | exit(1);
22 | }
23 | printf("[+]Client Socket is created.\n");
24 |
25 | memset(&serverAddr, '\0', sizeof(serverAddr));
26 | serverAddr.sin_family = AF_INET;
27 | serverAddr.sin_port = htons(PORT);
28 | serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
29 |
30 | ret = connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
31 | if(ret < 0){
32 | printf("[-]Error in connection.\n");
33 | exit(1);
34 | }
35 | printf("[+]Connected to Server.\n");
36 |
37 | while(1){
38 | printf("Client: \t");
39 | scanf("%s", &buffer[0]);
40 | send(clientSocket, buffer, strlen(buffer), 0);
41 |
42 | if(strcmp(buffer, ":exit") == 0){
43 | close(clientSocket);
44 | printf("[-]Disconnected from server.\n");
45 | exit(1);
46 | }
47 |
48 | if(recv(clientSocket, buffer, 1024, 0) < 0){
49 | printf("[-]Error in receiving data.\n");
50 | }else{
51 | printf("Server: \t%s\n", buffer);
52 | }
53 | }
54 |
55 | return 0;
56 | }
--------------------------------------------------------------------------------
/tcpServer.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 |
10 | #define PORT 4444
11 |
12 | int main(){
13 |
14 | int sockfd, ret;
15 | struct sockaddr_in serverAddr;
16 |
17 | int newSocket;
18 | struct sockaddr_in newAddr;
19 |
20 | socklen_t addr_size;
21 |
22 | char buffer[1024];
23 | pid_t childpid;
24 |
25 | sockfd = socket(AF_INET, SOCK_STREAM, 0);
26 | if(sockfd < 0){
27 | printf("[-]Error in connection.\n");
28 | exit(1);
29 | }
30 | printf("[+]Server Socket is created.\n");
31 |
32 | memset(&serverAddr, '\0', sizeof(serverAddr));
33 | serverAddr.sin_family = AF_INET;
34 | serverAddr.sin_port = htons(PORT);
35 | serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
36 |
37 | ret = bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
38 | if(ret < 0){
39 | printf("[-]Error in binding.\n");
40 | exit(1);
41 | }
42 | printf("[+]Bind to port %d\n", 4444);
43 |
44 | if(listen(sockfd, 10) == 0){
45 | printf("[+]Listening....\n");
46 | }else{
47 | printf("[-]Error in binding.\n");
48 | }
49 |
50 |
51 | while(1){
52 | newSocket = accept(sockfd, (struct sockaddr*)&newAddr, &addr_size);
53 | if(newSocket < 0){
54 | exit(1);
55 | }
56 | printf("Connection accepted from %s:%d\n", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
57 |
58 | if((childpid = fork()) == 0){
59 | close(sockfd);
60 |
61 | while(1){
62 | recv(newSocket, buffer, 1024, 0);
63 | if(strcmp(buffer, ":exit") == 0){
64 | printf("Disconnected from %s:%d\n", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
65 | break;
66 | }else{
67 | printf("Client: %s\n", buffer);
68 | send(newSocket, buffer, strlen(buffer), 0);
69 | bzero(buffer, sizeof(buffer));
70 | }
71 | }
72 | }
73 |
74 | }
75 |
76 | close(newSocket);
77 |
78 |
79 | return 0;
80 | }
--------------------------------------------------------------------------------