Need Desperate Help...Java Sockets

J

JatP

hi Everyone
I am trying to create a server and client to send files from one side
to the other. I can send files from one side to the other using
bufferedinput/output streams but when trying to send normal messages
with printwriter my files being sent across are messed up. Empty jpg's
are being sent with wrong file sizes. My code as follows:


public class TCPServer
{
public static final int BUFFER_SIZE = 4096;
public static final int RCV_PORT = 45000;

public static void main(String[] args)
{
ServerSocket server;
Socket socket;
File file;
PrintWriter out;
BufferedReader in;
String line;

file = new File("C:project");

try
{
server = new ServerSocket(RCV_PORT);
socket = server.accept();

OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
out = new PrintWriter(os,true);
in = new BufferedReader(new InputStreamReader(is));

out.println("OK"); //WHEN I HAVE THIS LINE MY FILE BEING SEND IT
MESSED UP. BUT WITHOUT THIS THE FILE IS SENT PERFECTLY


SendFile(file, "test.JPG", os);
out.close();
in.close();
socket.close();
} catch (IOException e) { }

}

static void SendFile(File file, String filename, OutputStream os)
{
try
{
byte[] buffer = new byte[BUFFER_SIZE];
int count;
File nfile = new File(file,filename);
FileInputStream Fis = new FileInputStream(nfile);
BufferedInputStream ins = new BufferedInputStream(Fis);
BufferedOutputStream outs = new BufferedOutputStream(os);
while(true)
{
count = ins.read(buffer, 0, BUFFER_SIZE);
if (count <= 0)
break;
outs.write(buffer, 0, count);
System.out.println(buffer);
}
outs.flush();
outs.close();
ins.close();
} catch (IOException e) {System.out.println(e);}
}

}

CLIENT
---------

public class TCPClient
{
public static final int BUFFER_SIZE = 4096;
public static final String FILE_NAME = "WORK.jpg";
public static void main(String[] args)
{
int port;
String addr;
try
{
Socket socket = new Socket(addr,port);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
PrintWriter out = new PrintWriter(os, true);
BufferedReader in = new BufferedReader(new InputStreamReader(is));

String line = in.readLine(); //WHEN I HAVE THIS CODE ON THE CLIENT
SIDE
if (line.compareTo("OK")!=0) //WITH RESPECT TO WHAT I HAVE ON THE
SERVER SIDE
return; //THE FILE BEING RECEIVED IS MESSED UP, OTHERWISE IS PERFECTLY
RECEIVED

RcvFile(is);

out.close();
in.close();
socket.close();
} catch (IOException e) { }

}

static void RcvFile(InputStream is)
{
try
{
BufferedInputStream ins = new BufferedInputStream(is);
BufferedOutputStream outs = new BufferedOutputStream(new
FileOutputStream(FILE_NAME));
byte[] buffer = new byte[BUFFER_SIZE];

while(true)
{
int count = ins.read(buffer, 0, BUFFER_SIZE);
if (count <= 0)
{
break;
}
outs.write(buffer, 0, count);
System.out.println(buffer);
}
outs.flush();
ins.close();
outs.close();
}
catch(IOException e) {}
}

}




Please let me know what i am doing wrong. From all the playing around
i have done it seems that once i bind and send anything via the
printwriter the Bufferedinputstream doesn't work properly.

Thanks a million

JatP
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,767
Messages
2,569,571
Members
45,045
Latest member
DRCM

Latest Threads

Top