2016-11-15 4 views
0

Как я могу создать кадр, который выглядит следующим образом:Java android отправить изображение на сервер, как я могу создать кадр?

0xB (byte) 
0xA (byte) 
0xA (byte) 
0xD (byte) 
width img (short) 
height picture (short) 
size img in byte (int) 
Binary data PICTURE 
0xB (byte) 
0xE (byte) 
0xE (byte) 
0xF (byte) 

Я не знаю, как я могу создать этот кадр.

Ширина и высота img я так же, как это:

BitmapDrawable bd=(BitmapDrawable) this.getResources().getDrawable(R.drawable.icon); 
int height=bd.getBitmap().getHeight(); 
int width=bd.getBitmap().getWidth(); 

Здесь я получаю размер:

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
    R.drawable.ic_launcher); 
Bitmap bitmap = bitmapOrg; 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
byte[] imageInByte = stream.toByteArray(); 
long lengthbmp = imageInByte.length; 

ответ

0

КАЖЕТСЯ Вам нужно Socketconnection. Что-то вроде этого (после кода):

Socket clientSocket; 

clientSocket = new Socket(<address_of_server>, <number_of_port>); 

DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream()); 
dos.writeByte((byte)0xB); 
dos.writeByte((byte)0xA); 
dos.writeByte((byte)0xA); 
dos.writeByte((byte)0xD); 
dos.writeShort(width); 
dos.writeShort(height); 
dos.writeInt(lengthbmp); 
dos.write(imageInByte); 
dos.writeByte((byte)0xB); 
dos.writeByte((byte)0xE); 
dos.writeByte((byte)0xE); 
dos.writeByte((byte)0xF); 
... 
clientSocket.close(); 

Вы можете Google больше примеров Socket соединения, например this.

Update

Вы также можете использовать сокеты для отправки строк на сервер:

clientSocket = new Socket(serverAddr, SOCKET_SERVERPORT); 

dos = new DataOutputStream(clientSocket.getOutputStream()); 
dos.writeUTF("Hello"); 
dos.writeUTF("World!"); 
... 

И Вы должны это сделать в отдельном (не UI) потока. Полный пример что-то вроде этого:

class SocketClientThread implements Runnable { 
     DataInputStream dis; 
     DataOutputStream dos; 
     String strResponseData; 

     @Override 
     public void run() { 
      try { 
       InetAddress serverAddr = InetAddress.getByName("<address>"); 
       clientSocket = new Socket(serverAddr, <port_number>); 
       dos = new DataOutputStream(clientSocket.getOutputStream()); 
       dis = new DataInputStream(clientSocket.getInputStream()); 

       // now you can write data to stream 
       dos.writeUTF("Hello"); 
       dos.writeUTF("World!"); 

       // you can also read data from stream 
       strResponseData = dis.readUTF(); 


      } catch (UnknownHostException ignore) { 
      } catch (IOException ignore) { 
      } 

      finally{ 
       if (clientSocket != null){ 
        try { 
         clientSocket.close(); 
        } 
        catch (IOException ignore) { 
        } 
       } 
      } 
     } 
} 

И чем Вы можете использовать SocketClientThread таким образом:

Thread socketClientThread; 
socketClientThread = new Thread(new SocketClientThread()); 
socketClientThread.start(); 
+0

Андрей Омельченко мог бы ты exmplain мне, как я могу отправить с помощью сокета? –

+0

Прежде всего, ваш сервер должен обработать соединение «socket». В этом случае вы можете создать поток загрузки и записать в него байты в соответствии с вашим форматом данных. [Здесь] (http://android-er.blogspot.com/2014/02/android-sercerclient-example-client.html) - другой хороший пример. –

+0

Хорошо, но, например, я хочу отправить строку «Hello world» в байте, и я не знаю, как я могу это сделать для этого примера. Не могли бы вы помочь мне ? –

Смежные вопросы