I have written java code using socket programming to transfer files between android(aakash tablet) it works fine with files of small size . but for large file it shows :
java.net.SocketException: Connection reset.
Please suggest any change to so, that i can even transfer large file (like introducing buffer(but i do not know how to use that ))
here is code for sending file :
package javaapplication1;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.io.File ;
/**
*
* @author akash
*/
public class Transfer {
public static void fileTransfer(Socket client, File file ,DataOutputStream out) {
try {
System.out.println(file.length());
String length= ""+file.length();
FileInputStream fileInputStream = new FileInputStream(file);
OutputStream socketOutputStream = client.getOutputStream();
long startTime = System.currentTimeMillis();
byte buffer[]= new byte[64] ;
int read;
int readTotal = 0;
out.writeUTF(length);
System.out.println(file.length());
for(int j =(int)file.length();j>0;j-=64) {
read = fileInputStream.read(buffer);
socketOutputStream.write(buffer, 0, read);
readTotal += read;
}
long endTime = System.currentTimeMillis();
System.out.println(readTotal + " bytes written in " + (endTime - startTime) + " ms.");
Thread.sleep(10000);
//socketOutputStream.close();
fileInputStream.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
here is code for receiving the file :
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
public class Accept {
public void FileAccept(InputStream clientInputStream, String fileName,
DataInputStream in) {
FileOutputStream file;
boolean flag = true;
System.out.print("hi file transfer start in few sec...");
try {
long startTime = System.currentTimeMillis();
file = new FileOutputStream(fileName, true);
System.out.println("file trsnsfer start of file");
String s = in.readUTF();
byte[] buffer = new byte[64];
int read;
int totalRead = 0;
int i = Integer.parseInt(s);
System.out.println(i + " " + s);
for (int j = i; j > 0; j -= 64) {
{
if(j<64){buffer=new byte[j];}
read = clientInputStream.read(buffer);
file.write(buffer);
}
totalRead += read;
}
System.out.println(fileName);
file.flush();
file.close();
long endTime = System.currentTimeMillis();
System.out.println(totalRead + " bytes read in "
+ (endTime - startTime) + " ms.");
} catch (FileNotFoundException f) {
System.out.println("error two " + f);
} catch (IOException e) {
System.out.println(e);
System.exit(0);
}
}
}
thanks in advance.
java.net.SocketException: Connection reset.
Please suggest any change to so, that i can even transfer large file (like introducing buffer(but i do not know how to use that ))
here is code for sending file :
package javaapplication1;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.io.File ;
/**
*
* @author akash
*/
public class Transfer {
public static void fileTransfer(Socket client, File file ,DataOutputStream out) {
try {
System.out.println(file.length());
String length= ""+file.length();
FileInputStream fileInputStream = new FileInputStream(file);
OutputStream socketOutputStream = client.getOutputStream();
long startTime = System.currentTimeMillis();
byte buffer[]= new byte[64] ;
int read;
int readTotal = 0;
out.writeUTF(length);
System.out.println(file.length());
for(int j =(int)file.length();j>0;j-=64) {
read = fileInputStream.read(buffer);
socketOutputStream.write(buffer, 0, read);
readTotal += read;
}
long endTime = System.currentTimeMillis();
System.out.println(readTotal + " bytes written in " + (endTime - startTime) + " ms.");
Thread.sleep(10000);
//socketOutputStream.close();
fileInputStream.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
here is code for receiving the file :
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
public class Accept {
public void FileAccept(InputStream clientInputStream, String fileName,
DataInputStream in) {
FileOutputStream file;
boolean flag = true;
System.out.print("hi file transfer start in few sec...");
try {
long startTime = System.currentTimeMillis();
file = new FileOutputStream(fileName, true);
System.out.println("file trsnsfer start of file");
String s = in.readUTF();
byte[] buffer = new byte[64];
int read;
int totalRead = 0;
int i = Integer.parseInt(s);
System.out.println(i + " " + s);
for (int j = i; j > 0; j -= 64) {
{
if(j<64){buffer=new byte[j];}
read = clientInputStream.read(buffer);
file.write(buffer);
}
totalRead += read;
}
System.out.println(fileName);
file.flush();
file.close();
long endTime = System.currentTimeMillis();
System.out.println(totalRead + " bytes read in "
+ (endTime - startTime) + " ms.");
} catch (FileNotFoundException f) {
System.out.println("error two " + f);
} catch (IOException e) {
System.out.println(e);
System.exit(0);
}
}
}
thanks in advance.