By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,037 Members | 1,839 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,037 IT Pros & Developers. It's quick & easy.

Need Desperate Help...Java Sockets

P: n/a
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
Jul 17 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
Did you look at the line separator on client and server side?
The documentation of PrintWriter says

* The println() methods
* use the platform's own notion of line separator rather than the newline
* character.

See also the private void newLine() method in PrintWriter.

Stephan

__________________________________________
Stephan Wehner
Editor, Traffic Life: Passionate Tales and Exit Strategies
An anthology about our car culture and alternatives with
short stories, poems, cartoons and lots of other art
www.trafficlife.com

vi********@yahoo.com (JatP) wrote in message news:<8e**************************@posting.google. com>...
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

Jul 17 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.