0

I recently made a server client program in c but it doesn't seem to work. the only thing i get when compiling it is a warning and the fact that there is a fault in the client. Could anyone help me a bit?

This is the server code:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
    int server_socket;
    server_socket = socket(AF_INET,SOCK_STREAM,0);
    struct sockaddr_in server_address;
    int addrlen = sizeof(server_address);
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9000);
    server_address.sin_addr.s_addr = INADDR_ANY;

    bind (server_socket, (struct sockaddr*) &server_address, sizeof(server_address));
    int client_socket;
    listen(server_socket, 3);
    client_socket=accept(server_socket, NULL, (socklen_t*)&addrlen);
    char response[256];

    recv(server_socket, &response, sizeof(response), 0);

    printf("%s",response);
    pclose (server_socket);
    return (0);
}

and this is the client code:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>  

int main()
{ 
    int network_socket; 
    network_socket = socket(AF_INET,SOCK_STREAM, 0);

    struct sockaddr_in server_address; 
    server_address.sin_family = AF_INET; 
    server_address.sin_port = htons(9000); 
    server_address.sin_addr.s_addr = INADDR_ANY; 

    int connection_status = connect(network_socket, (struct sockaddr*)&server_address, sizeof(server_address));
    if (connection_status == -1) { printf("ERROR"); } 

    char maw[256] = "this is a message"; send(network_socket, maw, sizeof(maw), 0); close(server_address); 
    return(0); 

    pclose(network_socket); 
}
mpromonet
  • 11,326
  • 43
  • 62
  • 91
ne ne
  • 1
  • 1
    Go on, give us a clue: what was the warning ? I have a feeling that `close(server_address)` should be `close(network_socket)`. – Chris Hall Apr 05 '20 at 16:57

1 Answers1

2

There is also an error in the server code.

Server code:

When you want to receive the message from the client, you must use the client_socket in your code in the recv() function. Not the server_socket itself.

Client code:

Why you are using the pclose() function, for closing the socket? It's for pipes and requires a FILE pointer. Furthermore the function never get called (after return statement).

This should work (tested on my system):

Server:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
    int server_socket;
    server_socket = socket(AF_INET,SOCK_STREAM,0);
    struct sockaddr_in server_address;
    int addrlen = sizeof(server_address);
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9000);
    server_address.sin_addr.s_addr = INADDR_ANY;

    bind (server_socket, (struct sockaddr*) &server_address, sizeof(server_address));
    int client_socket;
    listen(server_socket, 3);
    client_socket=accept(server_socket, NULL, (socklen_t*)&addrlen);
    char response[256];

    recv(client_socket, &response, sizeof(response), 0);

    printf("%s",response);
    shutdown (client_socket, SHUT_RDWR);
    close (client_socket);
    shutdown (server_socket, SHUT_RDWR);
    close (server_socket);
    return (0);
}

Client:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>  

int main()
{ 
    int network_socket; 
    network_socket = socket(AF_INET,SOCK_STREAM, 0);

    struct sockaddr_in server_address; 
    server_address.sin_family = AF_INET; 
    server_address.sin_port = htons(9000); 
    server_address.sin_addr.s_addr = INADDR_ANY; 

    int connection_status = connect(network_socket, (struct sockaddr*)&server_address, sizeof(server_address));
    if (connection_status == -1) { printf("ERROR"); } 

    char maw[256] = "this is a message"; 
    send(network_socket, maw, sizeof(maw), 0);
    shutdown (network_socket, SHUT_RDWR);
    close(network_socket);
    return(0);
}

For the function shutdown() see this answer.

  • hello thank you very much. i tired it on my system and its not working ( not printing the message ) any ideas on what i should do? again thank you for the help – ne ne Apr 14 '20 at 17:41
  • @nene Sorry for my late response. You could try, to check the return value of the `recv()` function in the server code. It should return the number of received bytes or `-1` on error. –  Apr 19 '20 at 04:39