I am new to C programming and working on tcp/ip protocol. When we try to communicate from android to C by sending a text file, i am able to receive the text file in partial not the complete file. There is a mismatch in bytes with the source file and the received file.How to eradicate this.
[edit]
// I have given the code for further reference
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys ioctl.h="">
#include<sys types.h="">
#include<arpa inet.h="">
#include<sys socket.h="">
int a = 1;
char str1[3], str2[] = "ok", str3[] = "no";
char *pBuf;
int receive_text(long long int new_socket)
{
long int buffersize = 0, recv_size = 0, size = 0, read_size, write_size;
char verify = '1';
int errno;
FILE *text;
recv(new_socket, (char *)& size, sizeof(int), 0);
send(new_socket, & verify, sizeof(char), 0);
text = fopen("/home/sosdt009/Desktop/received.txt", "w");
if (text == NULL)
{
puts("Error has occurred. Text file could not be opened \n");
return -1;
}
while (recv_size < size)
{
ioctl(new_socket, FIONREAD, & buffersize);
if (buffersize > 0)
{
pBuf = malloc(buffersize);
if (!pBuf)
{
fprintf(stderr, "Memory Error. Cannot allocate!\n");
exit(-1);
}
read_size = recv(new_socket, pBuf, buffersize, 0);
if (read_size < 0)
{
printf("%s", strerror(errno));
}
write_size = fwrite(pBuf, 1, buffersize, text);
free(pBuf);
recv_size += write_size;
}
}
fclose(text);
return 1;
}
int main(int argc, char *argv[])
{
int socket_desc, new_socket, c, read_size, buffer = 0;
struct sockaddr_in server, client;
char *readin;
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
if (socket_desc == -1)
{
printf("Could not create socket:");
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(6777);
if (bind(socket_desc, (struct sockaddr *)& server, sizeof(server)) < 0)
{
puts("bind failed");
return 1;
}
puts("Bind completed");
listen(socket_desc, 3);
puts("Waiting for incoming connections...");
c = sizeof(struct sockaddr_in);
if ((new_socket = accept(socket_desc, (struct sockaddr *)& client, (socklen_t *)& c)))
{
puts("Connection accepted");
}
fflush(stdout);
close(socket_desc);
if (new_socket< 0)
{
perror("Accept Failed");
return 1;
}
while (1)
{
receive_text(new_socket);
}
close(socket_desc);
return 0;
}
[/edit]