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;
}