Este artigo explica o código detalhado da programação do soquete Java para implementar um serviço simples de saudação para sua referência. O conteúdo específico é o seguinte
Lado do servidor:
Implementando o serviço Hello mais simples, imprima o endereço IP do cliente no console, envie uma sequência de caracteres (olá, soquete Java) para qualquer cliente conectado e feche a conexão com o cliente. Aguarde a chegada da solicitação de conexão do próximo cliente.
Cliente:
Implementar um soquete mais simples para se conectar ao Hello Server, aceita dados de bytes enviados pelo servidor e imprime o conteúdo do console.
Dicas importantes:
Como o Java fornece muitas APIs de fluxo de entrada e saída, muitos iniciantes são expostos à programação do soquete Java e, como não têm entendimento da natureza da comunicação de bytes de rede, eles aceitam diretamente fluxos de bytes por readline (). No entanto, como a parte do envio não envia /r /n, os dados não podem ser lidos. Este é o erro mais comum. Alguns outros erros comuns incluem não inicializar o buffer de aceitação, resultando em caracteres distorcidos e não remontados de acordo com o número de bytes recebidos pela leitura, resultando em uma exceção aos dados recebidos. Portanto, o código demonstra o que é enviado por byte e aceitação por byte. Este é um conceito e princípio muito importantes na programação de rede. Deixe o método de fluxo de entrada println () e o método de fluxo de saída readLine () vá para o inferno. Não é que não seja fácil de usar, mas sugiro que você não o use porque eles impedirão sua compreensão e compreensão da essência da programação de rede. Além disso, gostaria de fazer uma nota especial: às vezes Flush () não é necessário, a menos que você use um fluxo de entrada e saída em buffer para ler e escrever bytes.
Código do lado do servidor:
pacote com.gloomyfish.socket.tutorial.two; importar java.io.dataOutputStream; importar java.io.ioException; importar java.net.serversocket; importar java.net.socket; classe pública Helloservice estende thread {private ServerSocket ServerSocket; public Helloservice (Int Port) lança IoException {ServerSocket = new ServerSocket (porta); } public void run () {try {while (true) {System.out.println ("aguardando o cliente na porta" + serversocket.getLocalport ()); Socket Client = ServerSocket.accept (); // bloqueado e aguardando o soquete de renda System.out.println ("Apenas conectado a" + client.getRemoteSocketAddress ()); DataOutputStream DOS = new DataOutputStream (client.getOutputStream ()); byte [] hello = "Hello, Java Socket" .getBytes (); Dos.Write (Hello, 0, Hello.Length); dos.close (); client.close (); }} catch (Exceção e) {e.printStackTrace (); }} public static void main (string [] args) {try {helloservice Service = new Helloservice (9999); Service.start (); } catch (ioexception e) {e.printStackTrace (); }}} O servidor ouve na porta 9999 e aguarda a conexão e usa o thread Java para obter uma inicialização do lado do servidor.
O código do cliente é o seguinte:
pacote com.gloomyfish.socket.tutorial.two; importar java.io.datainputStream; importar java.io.ioException; importar java.net.inetsocketaddress; importar java.net.socketAddress; importar java.net.socketAddress; classe pública Helloclient {private int clientNumber; endereço de soquete privado; public helloclient (int clientnum) {clientnum = clientnum; } public void SetupClients (String ServerHostName, Int Port) lança IoException {endereço = novo INetSocketAddress (serverHostName, porta); for (int i = 0; i <clientNumber; i ++) {System.out.println (); System.out.println ("Iniciar o número do cliente" + (i + 1)); Soquete soquete = new soket (); Socket.Connect (endereço); DataAinputStream buffaredReader = new DatainputStream (Socket.getInputStream ()); byte [] cbuff = novo byte [256]; char [] charBuff = novo char [256]; int tamanho = 0; while ((size = bufferredreader.read (cbuff))> 0) {convertbytetoChar (cbuff, charBuff, size); System.out.println (CharBuff); } bufferreader.close (); Socket.Close (); }} private void convertbytetoChar (byte [] cbuff, char [] charBuff, int size) {for (int i = 0; i <charBuff.length; i ++) {if (i <size) {charBuff [i] = (char) cbuff [i]; } else {charBuff [i] = ''; }}} public static void main (string [] args) {try {helloclient client = new helloclient (10); client.setUpClients ("localhost", 9999); } catch (ioexception e) {e.printStackTrace (); }}} Inicie 10 clientes para se conectar ao lado do servidor e, depois de receber a saudação do servidor, o cliente fecha a conexão.
Dica especial: certifique -se de inicializar o buffer Charbeff
Resultados em execução do programa:
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.