Hello,
I made a program that transfers a JSON file using the client's socket to the server. In fact, I wanted to send a message after receiving the file from the server to the client but apparently there is a problem that is wrong, so the message does not arrive at the client. Can you help me please. Here are the source codes:
server.c
Code:
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <json-c/json.h>
#include <netinet/in.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <unistd.h>
#include "jsmn.h"
#define BUFFER_SIZE 1024
#define MARGE_PROGRESSION 100
#define BUFFER_SIZE_JSON 100000
#define MAX_TOKEN_COUNT 128
pthread_t th_server;
pthread_cond_t cond_sr;
pthread_mutex_t verrou_sr;
/***********************************************************************
* Main.c:
**********************************************************************/
int main(int argc, char *argv[])
{
FILE* fichier_sr;
int socket = 0;
int size_line, desc_write;
long fichier_size = 0, size_avanc_sr = 0;
char* fichier_sr_nom = "server_test.json";
char* line_buf = (char *) malloc (BUFFER_SIZE*sizeof(char));
char* Msg_to_cl = (char* )malloc(BUFFER_SIZE*sizeof(char));
Msg_to_cl = "hello from server\n";
pthread_mutex_init (&verrou_sr, NULL);
pthread_cond_init (&cond_sr, NULL);
fichier_sr = fopen(fichier_sr_nom,"w");
socket = attente (socket, argv[1]);
fichier_size = lire_taille_fich(socket, fichier_size);
pthread_create(&th_server,NULL,thread_pourcentage_server,NULL);
while((size_line = recevoir_fichier(size_line,socket, line_buf)) >= 0)
{
if (size_line == 0)
{
break;
}
desc_write = ecrire_fichier(desc_write,size_line,fichier_sr,line_buf);
size_avanc_sr += size_line;
pthread_mutex_lock(&verrou_sr);
result_server=100*((float)(size_avanc_sr)/(float)(fichier_size));
pthread_mutex_unlock(&verrou_sr);
pthread_cond_broadcast(&cond_sr);
usleep(100000);
if (desc_write < size_line)
{
perror("File write failed on server.\n");
}
}
pthread_join(th_server, NULL);
pthread_mutex_destroy (&verrou_sr);
pthread_cond_destroy (&cond_sr);
fclose(fichier_sr);
//parseJSON(fichier_sr_nom);
send(socket,Msg_to_cl,BUFFER_SIZE,0);
return 0;
}
client.c
Code:
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/stat.h>
#include <pthread.h>
#define BUFFER_SIZE 1024
#define MARGE_PROGRESSION 100
pthread_t th_client;
pthread_cond_t cond_cl;
pthread_mutex_t verrou_cl;
/***********************************************************************
* Main.c:
**********************************************************************/
int main(int argc, char *argv[])
{
FILE* fichier_cl;
int socket = 0;
long size_file = 0, size_avanc_cl = 0;
char* line_str = NULL;
char* file_name = "client_file.json";
char* Msg_from_sr = (char* )malloc(BUFFER_SIZE*sizeof(char));
size_t line_pos = 0;
ssize_t desc_line;
pthread_mutex_init (&verrou_cl, NULL);
pthread_cond_init (&cond_cl, NULL);
fichier_cl = fopen(file_name,"r");
size_file = taille_fich(file_name);
socket = connecte(socket,argv[1],argv[2]);
socket = envoyer_taille_fich(socket,size_file);
pthread_create(&th_client,NULL,thread_pourcentage_client,NULL);
while ((desc_line = getline(&line_str, &line_pos, fichier_cl)) != -1)
{
if((socket = envoyer_fich(socket,line_str)) < 0)
{
printf("ERROR: Failed to send file %s.\n", file_name);
break;
}
size_avanc_cl += strlen(line_str);
pthread_mutex_lock(&verrou_cl);
result_thread=100*((float)(size_avanc_cl)/(float)(size_file));
pthread_mutex_unlock(&verrou_cl);
pthread_cond_broadcast(&cond_cl);
//usleep(100000);
if (line_str)
{
free(line_str);
}
line_pos = 0;
}
pthread_join(th_client, NULL);
pthread_mutex_destroy (&verrou_cl);
pthread_cond_destroy (&cond_cl);
fclose(fichier_cl);
read(socket, Msg_from_sr, 100);
return 0;
}