Pergunta

Aqui está o meu cenário. Eu tenho um aplicativo escrito em C ++, mas não na fonte completa, mas a "carne" está lá. Eu também tenho um exe compilado deste aplicativo. Ele se comunica com um servidor em algum lugar aqui em nossa rede. Estou tentando replicar o código C ++ em Java, no entanto, ele usa o DWords e as referências de memória, tamanho de etc., todas as coisas que não existem no Java, pois gerenciam sua própria memória. Ele constrói essa grande mensagem complexa e a dispara sobre a rede. Por isso, estou basicamente cheirando o tráfego e inspecionando o pacote e tentando codificar os dados que ele está enviando para ver se consigo obter uma resposta do servidor dessa maneira. No entanto, não consigo replicar perfeitamente a mensagem. Algumas delas, como o código de licença que ele envia, é "Clear Hex", ou seja, Hex que se traduz em ASCII, onde-como algumas outras partes dos dados não são "claras de hexadecimal" como "AA", que não Traduza em ASCII (ou pelo menos um conjunto de caracteres comum? "Se isso faz algum sentido não tenho certeza).

Idealmente, eu gostaria de não fazer assim, mas é um trampolim para ver se o servidor pode responder a mim. Uma das funções é que o aplicativo se registre e esse é o que estou tentando replicar.

Algumas das minhas suposições acima podem estar erradas, então peço desculpas antecipadamente. Obrigado pelo seu tempo.

Foi útil?

Solução

Em Java, todos os dados de "personagem" são codificados como Unicode (e não ASCII). Então, quando você fala com algo lá fora, precisa mapear as cordas internas para o mundo exterior. Há várias maneiras de o fazer:

  1. Use um ByteArrayOutputStream. Este é basicamente um buffer crescente de bytes aos quais você pode anexar. Isso permite que você crie a mensagem usando bytes.

  2. Usar getBytes(encoding) Onde a codificação é a codificação, o outro lado entende. No seu caso, isso seria "ASCII" para as partes do texto.

No seu caso, você provavelmente precisa de ambos. Crie um buffer de byte e, em seguida, anexa strings e bytes a ele e envie o resultado final (getByteArray()) através da API do soquete.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top