umarsalman/Client-Server-

Client.c requires editing so it can accept and send messages given by the user

Opened this issue · 5 comments

Client.c requires editing so it can accept and send messages given by the user

Hi Umar, Can you specify more what exactly you expect this program should work between client and server?

Hi Umar, Can you specify more what exactly you expect this program should work between client and server?

hello,
client.c should be made to accept messages from the user and send it to the server.At present only server can do so. by doing this I want to prepare a two way chat system.

Hi Umar.
I saw where was the problem,In both file for sending message function send() was used but for receiving message from server or either from client read() function was used, this was the reason that program couldn't compile.
Read() will be used with write() For writting and reading block of data.
For sending receiving data accorss network connection we'll use send() and recv() functions.

i was using gcc compiler on Ubuntu so i changed ip add for client.
--Client
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#define PORT 8080

int main(int argc, char const *argv[])
{
struct sockaddr_in address;
int sock = 0, valread;
struct sockaddr_in serv_addr;
char *hello = "Hello from client";
char buffer[1024] = {0};
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("\n Socket creation error \n");
return -1;
}

memset(&serv_addr, '0', sizeof(serv_addr)); 

serv_addr.sin_family = AF_INET; 
serv_addr.sin_port = htons(PORT); 

// Convert IPv4 and IPv6 addresses from text to binary form 
if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) 
{ 
	printf("\nInvalid address/ Address not supported \n"); 
	return -1; 
} 

if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) 
{ 
	printf("\nConnection Failed \n"); 
	return -1; 
} 
send(sock , hello , strlen(hello) , 0 ); 
printf("Hello message sent\n"); 
recv( sock , buffer, 1024,0); 
printf("%s\n",buffer ); 
return 0; 

}

--server

#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#define PORT 8080
int main(int argc, char const *argv[])
{
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char *hello = "Hello from server";

// Creating socket file descriptor 
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) 
{ 
    perror("socket failed"); 
    exit(EXIT_FAILURE); 
} 
   
// Forcefully attaching socket to the port 8080 
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, 
                                              &opt, sizeof(opt))) 
{ 
    perror("setsockopt"); 
    exit(EXIT_FAILURE); 
} 
address.sin_family = AF_INET; 
address.sin_addr.s_addr = INADDR_ANY; 
address.sin_port = htons( PORT ); 
   
// Forcefully attaching socket to the port 8080 
if (bind(server_fd, (struct sockaddr *)&address,  
                             sizeof(address))<0) 
{ 
    perror("bind failed"); 
    exit(EXIT_FAILURE); 
} 
if (listen(server_fd, 3) < 0) 
{ 
    perror("listen"); 
    exit(EXIT_FAILURE); 
} 
if ((new_socket = accept(server_fd, (struct sockaddr *)&address,  
                   (socklen_t*)&addrlen))<0) 
{ 
    perror("accept"); 
    exit(EXIT_FAILURE); 
} 
recv( new_socket , buffer, 1024,0); 
printf("%s\n",buffer ); 
send(new_socket , hello , strlen(hello) , 0 ); 
printf("Hello message sent\n"); 
return 0; 

}

It looks good . Thanks for the help.