Bom, estou quase conseguindo usar “meu” protocolo hihi, obrigado Viny.
Desculpa a ignorância, mas como faria a leitura desta mensagem ? Abaixo posto meu código, comunicando meu android com meu servidor Java.
Abaixo o codigo do android, que está enviando a mensagem:
package br.edu.iftm.comunic;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Main extends Activity {
private final String ip="10.0.2.2";
private final int porta = 7777;
Socket cliente;
Button btnLogar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnLogar = (Button) findViewById(R.main.btn_Login);
btnLogar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
btnLogar_onClick(v);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} );
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void btnLogar_onClick(View v) throws IOException{
EditText login = (EditText) findViewById(R.main.login);
EditText senha = (EditText) findViewById(R.main.senha);
TextView resposta = (TextView) findViewById(R.main.resposta);
cliente = new Socket(ip, porta);
enviarMensagem(codificarString(login.getText().toString()));
}
public ByteArrayOutputStream codificarString(String str) throws IOException
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeByte(1); //Mensagem 1, login
dos.writeChars(str); // String a ser enviada;
return bos;
}
public void enviarMensagem(ByteArrayOutputStream mensagem) throws IOException
{
byte[] msg = mensagem.toByteArray();
DataOutputStream out = new DataOutputStream(cliente.getOutputStream());
out.writeInt(msg.length); //o tamanho da mensagem
out.write(msg); //Os dados
out.flush();
}
}
e abaixo, o codigo do servidor, no qual estou em dúvida como efetuar a leitura:
package servidorcomunic;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServidorComunic {
private static final int porta = 7777;
public static void main(String[] args) throws IOException, ClassNotFoundException {
ServerSocket server = new ServerSocket(porta);
System.out.println("Socket aberto na porta " + porta);
System.out.println("esperando ...");
Socket conexao= server.accept();
System.out.println("conectou !");
DataInputStream input = new DataInputStream(conexao.getInputStream());
System.out.println(input.readInt());
// já tou lendo o tamanho, e o conteúdo ? os chars ..
}
}
aproveito pra perguntar, como faria pra transmitir inúmeros dados, por exemplo, um arraylist de objetos de clientes (ou seja, com vários atributos) …
muito obrigado por antecipação…