-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3f88b8b
commit d11fb00
Showing
6 changed files
with
525 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
#include <netdb.h> | ||
#include <netinet/in.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <string.h> | ||
#include <sys/socket.h> | ||
#include <sys/types.h> | ||
#include <unistd.h> // read(), write(), close() | ||
#define MAX 80 | ||
#define PORT 8080 | ||
#define SA struct sockaddr | ||
|
||
// Function designed for chat between client and server. | ||
void func(int connfd) { | ||
char buff[MAX]; | ||
int n; | ||
// infinite loop for chat | ||
for (;;) { | ||
bzero(buff, MAX); | ||
|
||
// read the message from client and copy it in buffer | ||
read(connfd, buff, sizeof(buff)); | ||
// print buffer which contains the client contents | ||
printf("From client: %s\t To client : ", buff); | ||
bzero(buff, MAX); | ||
n = 0; | ||
// copy server message in the buffer | ||
while ((buff[n++] = getchar()) != '\n') | ||
; | ||
|
||
// and send that buffer to client | ||
write(connfd, buff, sizeof(buff)); | ||
|
||
// if msg contains "Exit" then server exit and chat ended. | ||
if (strncmp("exit", buff, 4) == 0) { | ||
printf("Server Exit...\n"); | ||
break; | ||
} | ||
} | ||
} | ||
|
||
// Driver function | ||
int main() { | ||
int sockfd, connfd, len; | ||
struct sockaddr_in servaddr, cli; | ||
|
||
// socket create and verification | ||
sockfd = socket(AF_INET, SOCK_STREAM, 0); | ||
if (sockfd == -1) { | ||
printf("socket creation failed...\n"); | ||
exit(0); | ||
} else | ||
printf("Socket successfully created..\n"); | ||
bzero(&servaddr, sizeof(servaddr)); | ||
|
||
// assign IP, PORT | ||
servaddr.sin_family = AF_INET; | ||
servaddr.sin_addr.s_addr = htonl(INADDR_ANY); | ||
servaddr.sin_port = htons(PORT); | ||
|
||
// Binding newly created socket to given IP and verification | ||
if ((bind(sockfd, (SA *)&servaddr, sizeof(servaddr))) != 0) { | ||
printf("socket bind failed...\n"); | ||
exit(0); | ||
} else | ||
printf("Socket successfully binded..\n"); | ||
|
||
// Now server is ready to listen and verification | ||
if ((listen(sockfd, 5)) != 0) { | ||
printf("Listen failed...\n"); | ||
exit(0); | ||
} else | ||
printf("Server listening..\n"); | ||
len = sizeof(cli); | ||
|
||
// Accept the data packet from client and verification | ||
connfd = accept(sockfd, (SA *)&cli, &len); | ||
if (connfd < 0) { | ||
printf("server accept failed...\n"); | ||
exit(0); | ||
} else | ||
printf("server accept the client...\n"); | ||
|
||
// Function for chatting between client and server | ||
func(connfd); | ||
|
||
// After chatting close the socket | ||
close(sockfd); | ||
} |
Oops, something went wrong.