Estou convertendo sequencias de oito 1’s e 0’s em um byte. Porém o range do byte em java vai de -128 to 127. Dessa forma, se eu converto uma sequencia que comece com 1 para um byte, como por exemplo 10001100 (140 em decimal), ele vai converter para um valor negativo (no caso 116) e e não vai conseguir converter de volta aos bits 1’s e 0’s depois que for enviado.
Deixa eu colocar códigos e exemplo para ficar mais fácil de se entender.
Servidor: Quando chega um pedido, envia dois bytes (-116 e 50).
public static void main(String args[]) throws SocketException, IOException{
DatagramSocket serverSocket = new DatagramSocket(53);
byte[] receiveData = new byte[512];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
InetAddress IPAddress = receivePacket.getAddress( );
int port = receivePacket.getPort();
int i = 140;
char c = (char)i;
byte b = (byte) c;
byte data[] = {b, 50};
DatagramPacket sendPacket = new DatagramPacket(data, data.length, IPAddress, port);
serverSocket.send(sendPacket);
serverSocket.close();
}
O valor de c é 140 e o de b é -116.
Cliente: Apenas envia um byte qualquer e recebe a resposta do servidor.
public static void main(String args[]) throws UnknownHostException, SocketException, IOException{
DatagramSocket clientSocket = new DatagramSocket();
InetAddress addr = InetAddress.getByName("localhost");
byte[] b = {1};
DatagramPacket pergunta = new DatagramPacket(b, b.length, addr, 53);
clientSocket.send(pergunta);
DatagramPacket answer = new DatagramPacket(new byte[512], 512);
clientSocket.receive(answer);
String msg = new String(answer.getData(), answer.getOffset(), answer.getLength());
char c = msg.charAt(0);
char c1 = msg.charAt(1);
System.out.println("Concluido");
}
Debugando, no final da execução o valor de c1 em decimal é 50 (corretamente) mas o de c é 338 (deveria ser -116).
Alguem tem alguma luz?