Need Desperate Help...Java Sockets

From: JatP (vicky235ca_at_yahoo.com)
Date: 03/08/04


Date: 7 Mar 2004 16:16:04 -0800

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



Relevant Pages

  • Need Desperate Help...Java Sockets
    ... I am trying to create a server and client to send files from one side ... public static final int BUFFER_SIZE = 4096; ... Socket socket; ... BufferedInputStream ins = new BufferedInputStream; ...
    (comp.lang.java)
  • Re: Howto find multiple servers using TCP
    ... int CAsyncSocket::SendTo( ... When a packet is sent using a UDP socket ... differences between multicast and regular udp packets, ... But if the server program is your program, ...
    (microsoft.public.vc.mfc)
  • unix domain sockets
    ... some reason when i #define NAME "my_sock" it doesn't create the socket ... so in order for the server to run multiple times I need to do ... int orig_sock; ... void clean_up(int, char *); ...
    (comp.unix.programmer)
  • Re: sending images over a socket
    ... I'm writing a program for sending images over a socket. ... > bytes) the server only receives 65533. ... void process_stuff; ... int sockfd_to_family; ...
    (comp.unix.programmer)
  • Socket in Applet
    ... I am writing an Applet which contains a socket to connect back to the ... server, accross the socket I will be sending vectors, from the server to the ... BufferedInputStream b = new BufferedInputStrea ( ...
    (comp.lang.java.help)