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
roject");
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
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
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