Ibrahem Ahmed
Ibrahem Ahmed

Reputation: 265

java tcp server to android device

i am trying to make a java server that will send images stored in a database to android device.

for now am trying with simple image that stored on the hard disk for the server to send.

my question is can i send an image from java server as a byte array to android via TCP sockets.

Upvotes: 0

Views: 518

Answers (3)

Viswanath Lekshmanan
Viswanath Lekshmanan

Reputation: 10083

The fastest and easiest approach for sending image is as follows...
Try this    
 // Server Side code for image sending

      ServerSocket servsock = new ServerSocket(13250);   
      System.out.println("Main Waiting...");
      Socket sock = servsock.accept();
      System.out.println("Accepted connection : " + sock);

      File myFile = new File ("\sdcard\ab.jpg");
      byte [] mybytearray  = new byte [(int)myFile.length()];
      FileInputStream fis = new FileInputStream(myFile);
      BufferedInputStream bis = new BufferedInputStream(fis);
      bis.read(mybytearray,0,mybytearray.length);*/

      byte [] mybytearray  =new byte[count];
      System.arraycopy(Copy, 0, mybytearray, 0, count);
      OutputStream os = sock.getOutputStream();
      System.out.println("Sending...");
      os.write(mybytearray,0,mybytearray.length);
      os.flush();
      os.close();
      sock.close();
      servsock.close();

//Client side code for image reception

try
{ 
    int filesize=6022386; // filesize temporary hardcoded
    long start = System.currentTimeMillis();
    int bytesRead;
    int current = 0;
    // localhost for testing
    ServerSocket servsocket = new ServerSocket(13267);
    System.out.println("Thread Waiting...");
    Socket socket = servsocket.accept();
    System.out.println("Accepted connection : " + socket);
    System.out.println("Connecting...");
    File f=new File("\sdcard\ab.jpg");
    f.createNewFile();
    // receive file
    byte [] mybytearray  = new byte [filesize];
    InputStream is = socket.getInputStream();
    FileOutputStream fos = new FileOutputStream(f);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    bytesRead = is.read(mybytearray,0,mybytearray.length);
    current = bytesRead;
   do {
       bytesRead =
       is.read(mybytearray, current, (mybytearray.length-current));
       if(bytesRead >= 0) current += bytesRead;
    } while(bytesRead > -1);
    count=current;
    Copy=mybytearray.clone();
    bos.write(mybytearray, 0 , current);
    bos.flush();
    long end = System.currentTimeMillis();
    System.out.println(end-start);
    bos.close();
    fos.close();
    socket.close();
    servsocket.close();
}
}   catch(IOException e)
{
    System.out.println("errorr");
}

Upvotes: 0

Joni
Joni

Reputation: 111219

Yes, you can, using TCP sockets.

Read the file as bytes and send it as bytes, don't try to load it as a BufferedImage.

Then, on the receiving end, use a function that allows you to load an image from an array of bytes.

Upvotes: 1

Greg Temkin
Greg Temkin

Reputation: 76

Sure, you can, but you will need to invent your own protocol for that. You may find using HTTP more, either setting up a web-server like Tomcat with your application deployed there, or use something embedded like Jetty

Upvotes: 0

Related Questions