Problemas com Socket em Java

5 respostas
destructor

Pessoal, toh com um pequeno problema com sockets.
Preciso desenvolver uma aplicação servidor q recebe pacotes de bytes do cliente tipo assim:

o cliente me manda o pacote: {0x03, 0xFFFF, 0x78, 0x25}

dae eu tenho q receber esse pacote, verificar se ele eh valido (com um XOR) e responder o cliente, soh q eu não consigo receber esse pacote…

alguém ai tem algum exemplo ???

5 Respostas

louds

Como você está fazendo?

Da uma olhada em java.sun.com, lá tem uns exemplos disso.

destructor

kra, toh fazendo com uns exemplo q peguei na net…

Na verdade estou portanto esse programa de Delphi pro Java pq o pessoal aki tah migrando tudo pra linux e toh meio perdido pra fazer isso pq não consigo pegar a resposta do cliente no servidor…

louds

E qual sua dúvida? Qual problema/situação você está encontrando que não funciona?

O seguinte código faz o que você quer, mas não quer dizer que atenda sua necessidade.

new ServerSocket(5000).accept().read(new byte[4]);
destructor

kra, uma classe pra testar mais não rolou. ó o fonte dela ae

import java.io.*;
import java.net.*;

public class tssjava {
    private static ObjectInputStream ois = null;
    private static int dataset1[] = new int[7];
    private static int dataset2[] = new int[7];
    private static SerializedObject x = null;

    /** Metodo main da class tssjava */
    public static void main(String[] args){
        int result[] = new int[7];

        try {
            ServerSocket serverSocket = new ServerSocket(23);
            Socket socket = serverSocket.accept();
            
            //ois = new ObjectInputStream(socket.getInputStream());
            //x = (SerializedObject) ois.readObject();
            //dataset1 = x.getArray();
  
            //for (int j=0;j<dataset1.length;j++) {
            //    System.out.println(dataset1[j]);
            //}
	    
            dataset1 = x.getArray(socket.read(new byte[7]));

	    ois.close();
            socket.close();
            serverSocket.close();
        } catch (Exception ex){
            System.out.println(ex.getMessage().toString());
        }
    }
}

na verdade eu preciso mandar e receber um array de 4/8 bytes via tcp/ip.
os clientes vão se conectar enviando 4 bytes (ex. 0x03 0x00 0xE0 0xEE) e eu tenho q receber o pacote, separa, verificar a concistencia e responder da mesma forma. isso q não toh conseguindo fazer no java, receber os bytes

Luca

Olá

Já deu uma estudada na classe ByteBuffer?

Sempre que a gente trabalha com sockets fazendo a interligação entre linguagens diferentes há várias possibilidades das coisas darem errado.

Por este motivo se costuma fazer pelo menos o seguinte:

  1. Verificar se nosso programa está correto.
    Basta fazer um cliente java para imprimir (2) o que mandamos e verificar se está de acordo com o previsto

  2. Imprimir o conteúdo hexadecimal da mensagem entre delimitadores.
    Assim verificamos se os bytes estão vindo na ordem certa, se chegam CR ou LF, etc.

  3. Tentar entender como o outro lado trabalha.
    Isto é importante por causa da questão de enconding e de byte order (LITTLE_ENDIAN e BIG_ENDIAN)

E calma! Programas de comunicações são legais de fazer porque dão trabalho até funcionar direito COM DESEMPENHO ACEITÄVEL.

Logs, logs e mais logs SEMPRE!

[]s
Luca

Criado 20 de setembro de 2006
Ultima resposta 20 de set. de 2006
Respostas 5
Participantes 3