O soquete Java (soquete) também é comumente conhecido como "soquete", que descreve endereços e portas IP e é uma alça para uma cadeia de comunicação. Os aplicativos geralmente fazem solicitações ou atendem solicitações de rede por meio de "soquetes".
Use o soquete para realizar a comunicação entre vários clientes e o mesmo cliente; Primeiro, o cliente se conecta ao servidor para enviar uma mensagem, o servidor processa a mensagem depois de receber a mensagem e, em seguida, responda ao cliente a uma mensagem depois de concluí -la. Escrevi um código implementado pelo servidor e pelo cliente através do meu próprio pensamento, na esperança de aprender com todos e progredir juntos.
Código do servidor
/** * Soquete servidor * Função Descrição: * */public class Server {/** * Entrada * * @param args * @throws ioexception */public static void main (string [] args) lança ioexception {// Para simplificar, todas as informações de exceção são lançadas por porta = 8899; Serversocket (porta); System.out.println ("Aguarde a conexão com o cliente ..."); enquanto (true) {// o servidor tenta receber solicitações de conexão de outros soquetes. O método de aceitação do servidor é um soquete de bloqueio = server.accept ();/*** Nosso servidor lida com as solicitações de conexão do cliente de maneira síncrona. Cada vez que recebemos uma solicitação de conexão do cliente, * devemos primeiro nos comunicar com o cliente atual antes de processar a próxima solicitação de conexão. Isso afetará seriamente o desempenho do programa quando houver mais simultaneidade. * Para esse fim, podemos alterá -lo para o seguinte processamento assíncrono de comunicação com o cliente* /// sempre que um soquete é recebido, um novo encadeamento é estabelecido para lidar com seu novo thread (nova tarefa (soquete). STARTE ();} //STICLSMENTMENTS.CLOSE ();}/** Classe de thread que manipula o SetorCetes. Task (soquete Socket) {this.socket = soket;} @substituir public void run () {try {handlersocket ();} catch (Exceção e) {e.printStacktrace ();}}/** ** ** Comunique -se com o sloket do cliente * * @Throws IoException */private landlersCocket () InputStream e leia as informações enviadas pelo cliente a partir dele/*** Ao receber dados do inputStream do soquete, ler um pouco como o acima é muito complicado. * Às vezes, mudamos para o uso do BufferErader para ler uma linha de cada vez * * O método ReadLine do BufferredReader lê uma linha de cada vez. Este método está bloqueado. O programa não continuará sendo executado até ler uma linha de dados. * Então, quando o ReadLine lerá uma linha? O método ReadLine não pensará que uma linha foi lida e * terminará o bloqueio e permitirá que o programa continue a executar. * Então, quando usamos o BufferredReader ReadLine para ler os dados, devemos lembrar de escrever quebras de linha no fluxo de saída correspondente (* será automaticamente marcada como final após o término do fluxo e a linha de leitura pode ser reconhecida). Após a escrita de quebras da linha, devemos lembrar de descarregar se o fluxo de saída não estiver fechado imediatamente, * somente então os dados podem ser realmente gravados no buffer. */BufferEredReader Br = new BufferredReader (novo InputStreamReader (Socket.getInputStream (), "UTF -8")); StringBuilder sb = new StringBuilder (); String temp; int index; while ((temp = Br.readline)! sb.append (temp.substring (0, índice)); quebra;} sb.append (temp);} system.out.println ("fort client [porta:" + soket.getport () + "] message content:" + sb.tostring (); // Responder ao cliente do cliente = acabe de outworkStreamiter (sb.tostring (); "Utf-8"); Writer.Write (String.Format ("Hi,%d. O céu é brilhante e o ar é limpo, o vento é suave!", Socket.getport ())); writer.flush (); writer.close (); system.out.println ("para o cliente [port:" + socket.getport () + "] com sucesso "); Br.Close (); Socket.Close ();}}}Código do cliente
importar java.io.inputStreamReader; importar java.io.outputStreamWriter; importar java.io.reader; importar java.io.writer; importar java.net.socket;/*** ^ Socket Client* Função* Função:** @Author A Wise e Public Entendment* @Ddate 30, 2016* 2016* estático void main (string [] args) {// Abra três clientes, um thread representa um cliente para (int i = 0; i <3; i ++) {new Thread (new Runnable () {@Override public void run () {try {testClient client = testFactory.createclient (); client.send (string.send (string {testclient client = testFactory.CreatEclient (); client.client.getLocalport ())); client.receive ();} catch (Exceção e) {e.printStackTrace ();}}}). start ();}}/*** factory que produz o cliente de teste*/sTatic TestFacient {Public Static TestClient () On Throws. 8899);}}/*** cliente de teste*/classe estática testclient {/*** construtor* @param host Endereço IP do servidor a ser conectado* @param porta a porta de escuta correspondente do servidor a ser conectada* @Throws Exception*/public testcient (string port) host) throws Exception {// estabelecer um conexão com a conexão com o servidor. Port); System.out.println ("Client [Port:" + clientLocalport () + "] Estabeleça uma conexão com o servidor ...");} cliente de soquete privado; escritor particular;/** * Enviar uma mensagem * @param msg * @throws Exception */public void (string msg) OutputStreamWriter (client.getOutputStream (), "utf-8");} writer.write (msg); writer.write ("eof/n"); writer.flush (); // Após escrever, lembre-se de liberar system.println ("cliente [port:" + ». RECET () LIGURAS EXCECTION {// Leia após escrever leitor leitor = new InputStreamReader (client.getInputStream (), "utf-8"); // Defina o tempo para receber dados como 10 segundos client.SetSotimeout (10*1000); char [] chars = new Char [64]; Int Len; ! = -1) {sb.append (new string (chars, 0, len));} system.out.println ("client [porta:" + client.getLocalport () + "] a mensagem foi recebida, o conteúdo:" + sb.toString ()); leitor.close (); // fechar o freenctor.close ();Em seguida, vamos simular:
1. Execute o servidor primeiro
2. Em seguida, execute o cliente (abra três solicitações do cliente)
Para demonstração, uso a ferramenta Eclipse no servidor e a ferramenta Intellij Idea no cliente. Neste momento, você pode ver a mensagem impressa pelo cliente no console
Um número de porta representa um cliente. Vamos olhar para a mensagem impressa pelo servidor no console.
Resumir
O exposto acima é todo o conteúdo deste artigo sobre o soquete de programação Java, implementando vários clientes para se conectar ao mesmo código do servidor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe uma mensagem e o editor responderá a todos a tempo.