Click here to Skip to main content
15,889,200 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
Hi,

I would like to send a text file to java from C, and receive the same file from java to C. I have developed the code, but i am facing some issues in the receiving function and i would like to know can two sockets can be established for transferring files each in send and receive function. Could somebody sort out the issue for me.

C++
#include<time.h>
 #include<errno.h>
 #include<stdio.h>
 #include<fcntl.h>
 #include<unistd.h>
 #include<string.h>    
 #include<stdlib.h>

 int send_text(int socket)

{ 
	FILE *text;
	char a[50];
	int size, read_size, stat, packet_index;
	char send_buffer[8008], read_buffer[8008];
	int wrt=0,sock_fd,tsize=0;
	packet_index = 1;
	int i=0; 
	text = fopen("/home/sosdt009/Desktop/character3.txt", "r"); 
	if (text == NULL)
	{
		printf("Error Opening text File:");
		exit(-1);
	} 	
	printf("Getting text Size:\n");
	gets(a);
	fseek(text, 0, SEEK_END);
	size = ftell(text);
	fseek(text, 0, SEEK_SET);
	printf("Total text size: %d \n", size);	
 	gets(a);

	//Send text Size

	printf("Sending text Size:\n",size);
	gets(a);
	send(socket, (void *)&size, sizeof(size), 0);

	/*do
	
	{		
		stat = recv(socket, read_buffer, 1024, 0);
			
	}*/while(stat < 0)
	printf("Socket data:%s \n", read_buffer); 
	gets(a);	
	while(size>tsize) 
 	{
 
		//Read from the file into our send buffer
		read_size = fread(send_buffer,1,sizeof(send_buffer),text);
		printf("The size of send buffer:%c \n",send_buffer);
		gets(a);
		printf("The read size value is :%d \n", read_size);
		gets(a);
		
		//Send data through our socket 
		
		do
		{			
			stat = send(socket, send_buffer, read_size, 0);
			printf("The send size value is: %d \n", size);
			gets(a);
			printf("The read size value is: %d \n", read_size);
			gets(a);

		} while (stat < 0); 
		printf("Packet %d, sent %d bytes.\n", packet_index, read_size);
		gets(a);
	
		//packet_index++;
		//Zero out our send buffer
		
		tsize = tsize+read_size;
		printf("The tsize value is:%d \n",tsize);
		gets(a);
    		memset(send_buffer,0, sizeof(send_buffer));

		if(read_size<=NULL)
		{
			printf("The connection is transferred to received text: \n");
			gets(a);
		}
	}
	fclose(text);
	//close(socket);
	printf("Text successfully send:\n");
	gets(a);
	return 0;	
}

int receive_text(int socket)
{ 
	int buffersize = 77,recv_size=0,read_size = 1, write_size,size; 
	char pBuf[77],a[50]; 
	int errnom,i;
	FILE *text; 
	size_t rec;
	text = fopen("/home/sosdt009/Desktop/receivednew.txt", "w"); 	
	if (text == NULL)	
	{		
		printf("Error has occurred, text file could not be opened \n");
		return -1;
	}
 
	//Loop while we have not received the entire file yet

	 while(read_size > 0)
	{
			
			//ioctl(socket, FIONREAD, &buffersize);
			printf("The Buffersize is    :%d\n",buffersize);
			gets(a);
			printf("The size of socket is:%d\n",socket);
			gets(a);
 
		//We check to see if there is data to be read from the socket 

		if (buffersize > 0)
		{
			printf("Buffersize value is  :%d\n", buffersize);
			gets(a);
			//pBuf = malloc(buffersize);
			if (!pBuf)
			{
				printf(errnom, "Memory Error Cannot Allocate!\n");
				gets(a);
				exit(-1);
			}
			
			//read_size = read(socket,pBuf,sizeof(pBuf));
			read_size = fread(pBuf,buffersize,1,text);
			//read_size = recv(socket,*pBuf,buffersize,1);
			printf("Read size value is :%d \n",read_size);
			gets(a);
			printf("Buffersize value is:%d \n",pBuf);
			gets(a);
			if (read_size < 0)
			{
				printf("%d\n",strerror(errno));
				printf("Data not written to the file:\n");
				gets(a);
				goto free;
 			}
			//Write the currently read data into our text file
			
			//write_size = write(socket,read_size,1);                //using write function
			write_size = fwrite(pBuf,sizeof(pBuf),1,text); 
			printf("Write size value is   :%d \n",write_size);
			gets(a);
			printf("Buffer size value is  :%d \n",buffersize);
			gets(a);			
		
			//Increment the total number of bytes read

			recv_size += read_size;
			printf("Received size value is:%d \n",recv_size);
			gets(a);
			printf("Read size value is    :%d \n",read_size);		
			gets(a);	
		}
	}
	free:
	fclose(text);
	close(socket); 	
	printf("Text Successfully Received:\n");
	gets(a);
	return 0;
}

int main(int argc,char *argv[])
{
		int socket_desc;
		struct sockaddr_in server;
		char *parray,errnomu;

		//Create socket

		socket_desc = socket(AF_INET,SOCK_STREAM,0);
		if(socket_desc == -1) 
		{
  			  printf("Could not create socket \n");
		}
			  memset(&server,0,sizeof(server));
			  server.sin_addr.s_addr = inet_addr("10.170.0.38");
			  server.sin_family = AF_INET;
			  server.sin_port = htons(6999); 

		//Connect to remote server
			
			  if (connect(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0) 
			  {

				 printf(strerror(errnomu));   					
			  	 printf("Connect Error \n");
    			  	 return -1;			
      			  }
			
			 puts("Connected");
			 send_text(socket_desc);
			 receive_text(socket_desc);
			 close(socket_desc);
			 return 0;
			
}
Posted
Updated 19-Aug-15 21:30pm
v4
Comments
CPallini 18-Aug-15 2:48am    
You should detail the issues you are experiencing on the receive function.
venkat28vk 18-Aug-15 2:51am    
I am receiving the file sent from java, but the values are displayed as following "
\00\00\00\00\00\00\00c@\00\00\00\00\009z\A2\FD\00\00\B3H\AA\84\00\00\00\94ބ\00\00 \00\00\00\00\00\00\00c@\00\00\00\00\00r\9F\A9\84"
venkat28vk 18-Aug-15 2:52am    
When i print the statements i am also getting the read size value as -1 in receive function, which indicates no data is written into the file.
CPallini 18-Aug-15 2:55am    
You are not reading from the socket, the recv call is commented out.
venkat28vk 18-Aug-15 3:13am    
I have tried out with recv also, but still i am getting the same error. Just to state that i have tried with all options i have put the stmt in the code.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900