I am building a system to do communication via Socket:
The client system sends the following information:
1 - int - message size
2 - bytes - the message
The message consists of:
1 - int - method code that I want to run on the server
2 - int - list size I want to send
3 - int - id of the person
4 - int - person name string size
5 - String - string of the person's name
Topics 3, 4, and 5 run for each list item
My client system looks like this:
private void btComunicarActionPerformed(java.awt.event.ActionEvent evt) {
List<PessoaMOD> pessoas = new ArrayList<PessoaMOD>();
pessoas.add(new PessoaMOD(1, "Pessoa 1"));
pessoas.add(new PessoaMOD(2, "Pessoa 2"));
pessoas.add(new PessoaMOD(3, "Pessoa 3"));
pessoas.add(new PessoaMOD(4, "Pessoa 4"));
pessoas.add(new PessoaMOD(5, "Pessoa 5"));
pessoas.add(new PessoaMOD(6, "Pessoa 6"));
pessoas.add(new PessoaMOD(7, "Pessoa 7"));
pessoas.add(new PessoaMOD(8, "Pessoa 8"));
try {
Socket cliente = new Socket("127.0.0.1", 12345);
enviarMensagem(codificarListarPessoas(pessoas), cliente);
} catch (Exception e) {
System.out.println("Erro: " + e.getMessage());
} finally {
}
}
public ByteArrayOutputStream codificarListarPessoas(List<PessoaMOD> pessoas) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeByte(1); //Método 1, gravar pessoas
dos.writeInt(pessoas.size()); // tamanho da lista
for (PessoaMOD p : pessoas) {
dos.writeInt(p.getId()); // id da pessoa
dos.writeInt(p.getNome().length()); //Nr de caracteres do nome da pessoa
dos.writeChars(p.getNome()); //Nome da pessoa
}
return bos;
}
public void enviarMensagem(ByteArrayOutputStream mensagem, Socket socket) throws IOException {
byte[] msg = mensagem.toByteArray();
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeInt(msg.length); //O tamanho da mensagem
out.write(msg); //Os dados
out.flush();
}
My question is to read this on the server: I'm doing this on the server:
private void btIniciarActionPerformed(java.awt.event.ActionEvent evt) {
new Thread() {
@Override
public void run() {
try {
ServerSocket servidor = new ServerSocket(12345);
System.out.println("Servidor ouvindo a porta 12345");
while (true) {
Socket cliente = servidor.accept();
System.out.println("Cliente conectado: " + cliente.getInetAddress().getHostAddress());
DataInputStream entrada = new DataInputStream(cliente.getInputStream());
int tamanhoMsg = entrada.readInt(); // ler tamanho da mensagem
// leio os bytes de acordo com o
//tamanho da mensagem lida anteriormente
byte[] bytes = new byte[tamanhoMsg];
int op = entrada.read(bytes, 0 , bytes.length);
// Como posso fazer a leitura separada dos dados enviados?
entrada.close();
cliente.close();
}
} catch (Exception e) {
System.out.println("Erro: " + e.getMessage());
} finally {
}
}
}.start();
}
I read the size of the message and received all the bytes according to the size sent .....
But now how can I separate these bytes according to the data I sent, ie, separate the size of the list, id, string size, name string.