Socket programming with TCP
TCP Socket Program - Server
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#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);
}
Compilation:
gcc server.c -o server
./server
Output:
Socket successfully created..
Socket successfully binded..
Server listening..
server accept the client...
From client: hi
To
client : hello
From client: exit
To
client : exit
Server Exit...
TCP Socket Program – Client
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#define MAX 80
#define PORT 8080
#define SA struct sockaddr
void func(int sockfd)
{
char
buff[MAX];
int
n;
for
(;;) {
bzero(buff,
sizeof(buff));
printf("Enter
the string : ");
n
= 0;
while
((buff[n++] = getchar()) != '\n')
;
write(sockfd,
buff, sizeof(buff));
bzero(buff,
sizeof(buff));
read(sockfd,
buff, sizeof(buff));
printf("From
Server : %s", buff);
if
((strncmp(buff, "exit", 4)) == 0) {
printf("Client
Exit...\n");
break;
}
}
}
int main()
{
int
sockfd, connfd;
struct
sockaddr_in servaddr, cli;
//
socket create and varification
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
= inet_addr("127.0.0.1");
servaddr.sin_port
= htons(PORT);
//
connect the client socket to server socket
if
(connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) != 0) {
printf("connection
with the server failed...\n");
exit(0);
}
else
printf("connected
to the server..\n");
//
function for chat
func(sockfd);
//
close the socket
close(sockfd);
}
Compilation:
gcc client.c -o client
./client
Output:
Socket successfully created..
connected to the server..
Enter the string : hi
From Server : hello
Enter the string : exit
From Server : exit
Client Exit...
No comments:
Post a Comment