Can't run client-server application without compiling it every time

Viewed 36

I'm making a simple client-server application, where client receives some information about a user and writes it into a file. The first time running it after compilation goes fine, but when I run it a second time without recompiling it the client won't connect to the server. That would be great if anyone could help me. Thank's in advance.

Server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>

#define PORT 9004

struct user_t
{
    char name[50];
    char surname[50];
    int age;
    int id;
};

int main()
{
    int choice = 1;
    struct sockaddr_in address;
    int server_fd, new_socket;
    struct user_t user;
    pid_t pid;

    server_fd = socket(AF_INET, SOCK_STREAM, 0);

   
    address.sin_family = AF_INET;
    address.sin_port = htons(PORT);
    address.sin_addr.s_addr = INADDR_ANY;

    bind(server_fd, (struct sockaddr *)&address, sizeof(address));

    listen(server_fd, 1);

    new_socket = accept(server_fd, NULL, NULL);

    while (choice)
    {
        pid = fork();
        if (pid > 0)
            wait(NULL);
        else
            break;
        printf("Enter 1 to add one more user, 0 to exit\n");
        scanf("%d", &choice);
        send(new_socket,&choice, sizeof(choice), 0);
        if (!choice)
        {
            close(new_socket);
            shutdown(server_fd, SHUT_RDWR);
            return 0;
        }
    }

    printf("Enter user's name\n");
    scanf("%s", user.name);
    printf("Enter user's surname\n");
    scanf("%s", user.surname);
    printf("Enter user's age\n");
    scanf("%d", &user.age);
    printf("Enter user's id\n");
    scanf("%d", &user.id);

    send(new_socket, user.name, sizeof(user.name), 0);
    send(new_socket, user.surname, sizeof(user.surname), 0);
    send(new_socket, &user.age, sizeof(user.age), 0);
    send(new_socket, &user.id, sizeof(user.id), 0);

    return 0;
}

Client.c

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

#define PORT 9004

struct user_t
{
    char name[50];
    char surname[50];
    int age;
    int id;
};

int main()
{
    int connection = 1;
    FILE* fptr;
    int choice = 1, size;
    struct sockaddr_in address;
    int network_socket;
    pid_t pid;
    struct user_t user;

    network_socket = socket(AF_INET, SOCK_STREAM, 0);

    address.sin_family = AF_INET;
    address.sin_port = htons(PORT);
    address.sin_addr.s_addr = INADDR_ANY;

    while (connection != 0)
    {
        connection = connect(network_socket, (struct sockaddr *)&address, sizeof(address));
    }

    fptr = fopen("user", "w");
    while (choice)
    {

        if(recv(network_socket, user.name, sizeof(user.name), 0) > 0)
            fprintf(fptr, "%s\n", user.name);
        if(recv(network_socket, user.surname, sizeof(user.surname), 0) > 0)
            fprintf(fptr, "%s\n", user.surname);        
        if(recv(network_socket, &user.age, sizeof(user.age), 0) > 0)
            fprintf(fptr, "%d\n", user.age);
        if(recv(network_socket, &user.id, sizeof(user.id), 0) > 0)
            fprintf(fptr, "%d\n\n", user.id);
        if(recv(network_socket, &choice, sizeof(choice), 0) > 0)
            fprintf(fptr, "%d", choice);
    }

    close(network_socket);
    return 0;
}
0 Answers
Related