#include<bits/stdc++.h>
using namespace std;
#include<sys/socket.h>
#include<arpa/inet.h>
#include <unistd.h>
#define MAX 500
#define port 5200
int main()
{
int serverSocketHandler = socket(AF_INET , SOCK_STREAM , 0);
//creating a socket and assigning it to the socket handler
if(serverSocketHandler < 0)
{
// socket methode return -1 if the creation was not successful
cout << "Socket creation has failed.";
return 0;
}
struct sockaddr_in serverAddr , clientAddr;
//specifying address and type for the server to operate under
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(port);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
int bindStatus = bind(serverSocketHandler , (struct sockaddr*) & serverAddr , sizeof(serverAddr));
if(bindStatus < 0)
{
cout << "Socket binding has failed" << endl;
return 0;
}
//listen to the client while others are waiting in queue of size 5
int listenStatus = listen(serverSocketHandler , 5);
if(listenStatus < 0)
{ // when queue is full listen fails
cout << "Listner has failed" << endl;
return 0;
}
cout << "\t\t...Waiting for connections... \n\n";
char buff[MAX];
int clientSocketHandler;
socklen_t len = sizeof(clientAddr);
int connection;
if((connection = accept(serverSocketHandler , (struct sockaddr*) & clientAddr , &len)) < 0)
{
cout << "Server didn't accept the request." << endl;
return 0;
}
else
{
cout << "Server accepted the request. \n" ;
}
while(true)
{
// infinite loop for chatting
int rMsgSize;
if((rMsgSize = recv(connection , buff , MAX , 0)) > 0){
cout << "received client : " << buff << endl;
if(buff[0] == 'b' && buff[1] == 'y' && buff[2] == 'e'){
cout << "Server : Bye bro" << endl;
cout << "\nConnection ended... take care bye bye...\n" ;
send(connection , buff , strlen(buff)+1 , 0);
break;
}
cout << "Server : ";
char input[MAX];
string s;
getline(cin , s);
int n = s.size();
for(int i = 0 ; i < n ; i++)
{
input[i] = s[i];
}
input[n] = '\0';
send(connection , input , strlen(input)+1 , 0);
}
}
close(serverSocketHandler);
return 0;
}
CLIENT
#include<bits/stdc++.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include <unistd.h>
using namespace std;
#define MAX 500
#define port 5200
int main()
{
int clientSocket , serverSocket , receiveMsgSize;
clientSocket = socket(AF_INET , SOCK_STREAM , 0);
if(clientSocket < 0)
{
cout << "Creation of client socket failed" << endl;
return 0;
}
struct sockaddr_in serverAddr , clientAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
serverAddr.sin_port = htons(port);
if(connect(clientSocket , (struct sockaddr*) & serverAddr , sizeof(serverAddr)) < 0)
{
cout << "Connection Error..." << endl;
return 0;
}
else
{
cout << "\t\tConnection Established..." << endl;
}
while(true)
{
string s;
char input[MAX];
cout << "Client : ";
getline(cin , s);
int n = s.size();
for(int i = 0 ; i < n ; i++)
{
input[i] = s[i];
}
input[n] = '\0';
send(clientSocket , input , strlen(input)+1 , 0);
char receiveMessage[MAX];
int rMsgSize = recv(clientSocket , receiveMessage , MAX , 0);
if(rMsgSize < 0)
{
cout << "Packet recieve failed." << endl;
return 0;
}
else if(rMsgSize == 0)
{
cout << "Server is off." << endl;
return 0;
}
if(receiveMessage[0] == 'b' && receiveMessage[1] == 'y' && receiveMessage[2] == 'e')
{
cout << "\nConnection ended... take care bye bye... " ;
break;
}
cout << "received server : " << receiveMessage <<endl;
}
close(clientSocket);
return 0;
}
OUTPUT
Comments
Khushi
18-Nov-2020 06:32:19 PM