Recentemente, iniciei um projeto em que há necessidade de comunicação na Web on -line. Não escrevo código há muito tempo e não estou familiarizado com ele. Então, eu escrevi uma demonstração e a pratiquei e compartilhei -a na plataforma de rede Wulin para fazer um registro para que ela possa ser usada com todos.
Deixe -me primeiro dizer as etapas de implementação:
1. Use o componente AWT e o soquete para implementar um cliente único simples para enviar continuamente mensagens para o servidor;
2. Combinado com threads, realize a conexão com vários clientes com o servidor para enviar mensagens;
3. Implemente as mensagens do cliente de encaminhamento de servidor para todos os clientes e exibi -las no cliente ao mesmo tempo;
4. Altere a interface da janela gerada pelo componente AWT para a interface exibida pelo JSP ou HTML frontal e altere o cliente implementado pelo soquete Java para a implementação da tecnologia front-end.
Aqui, primeiro implementamos a função simples da primeira etapa, a dificuldade é:
1. Nunca usei o componente AWT e nunca usei eventos de escuta relacionados a Java;
2. Não usei soquetes por longos períodos de tempo para interagir entre o cliente e o servidor, e não desenvolvi realmente a estrutura CSS.
O código para implementar a função é o seguinte:
Cliente:
pacote chat.chat; importar java.awt.borderlayout; importar java.awt.frame; importar java.awt.textarea; importar java.awt.textfield; importar java.awt.event.actionEvent; importar java.awt.event.actionListener; importar java.awt.event.windowadapter; importar java.awt.event.windowEvent; importar java.io.dataOutputStream; importar java.io.ioException; importar java.net.socket; importar java.net.unknownhostException; / ** * Cliente de bate -papo on -line 1. Gere o esboço da interface gráfica 2. Adicione um evento de fechamento ao esboço 3. Adicione uma área de entrada e uma área de exibição de conteúdo ao esboço 4. Adicione um evento de retorno de carro para a área de entrada * 5.Felt Felt uma conexão de servidor e envie dados de dados * * @Author TUZONNUN123 */ Public Class Class CHATCIENTE FROÇÃO { // Área de exibição de conteúdo TEXTAREA PRIVADO DE TEXTAREA = NOVA TEXTAREA (); soquete privado soquete = nulo; // fluxo de saída de dados DataSOUTPTUTTREAM DataOutputStream = null; public static void main (string [] args) {new ChatClient (). Launcframe (); } / ** * Crie uma janela gráfica simples * * @Author: TUzongxun * @title: Launcframe * @param * @return void * @date 18 de maio de 2016 9:57:00 * @throws * / public void launcframe () {setLocation (300, 200); this.SetSize (200, 400); add (tftxt, borderlayout.south); add (tarea, borderlayout.north); pacote(); // Ouça o evento de encerramento da janela da interface gráfica this.addwindowlistener (new windowAdapter () {@Override public void WindowClosing (WindowEvent e) {System.exit (0); desconect ();}}); tftxt.addactionListener (new tflister ()); setvisible (true); conectar(); } / ** * Conecte -se ao servidor * * @Author: TUZONGXUN * @TITLE: Connect * @param * @return void * @date 18 de maio de 2016 9:56:49 * @throws * / public void Connect () {Try {// Crie um novo soquete de conexão =; // Obtenha o fluxo de saída do cliente dataOutputStream = new DataOutputStream (Socket.getOutputStream ()); System.out.println ("Conecte -se ao servidor"); } catch (desconhecidohostException e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); }} / ** * Feche os recursos do cliente * * @Author: TUzongxun * @Title: Desconect * @param * @return void * @date 18 de maio de 2016 9:57:46 AM * @THOWS * / public void desconect () {Try {DataOutstream.Close (); Socket.Close (); } catch (ioexception e) {e.printStackTrace (); }} / ** * Envie uma mensagem para o servidor * * @Author: TUzongxun * @title: sendMessage * @param @param texto * @return void * @date 18 de maio de 2016 9:57:56 AM * @THOWS * / private void sendMessage (text) dataOutputStream.flush (); } catch (ioexception e1) {e1.printStackTrace (); }} / ** * Área de entrada da janela gráfica para ouvir para o evento de retorno de carruagem * * @Author TUzongxun123 * * / classe privada tflister implementa ActionListener {@Override public void ActionPerformed (ActionEvent e) {String text = tftxt.getText (). Trim (); taxa.settext (texto); tftxt.settext (""); // Envie dados para o servidor sendMessage (texto); }}}Servidor:
pacote chat.chat; importar java.io.datainputStream; importar java.io.eofexception; importar java.io.ioException; importar java.net.bindexception; importar java.net.serversocket; importar java.net.socket; /*** Java usa componentes de soquete e AWT para simplesmente implementar a função de bate -papo online. O servidor pode realizar o servidor para enviar continuamente mensagens para o servidor após conectar um cliente*, mas não suporta vários clientes para se conectar ao mesmo tempo. O motivo é que, depois de obter a conexão do cliente no código, ele continuará ouvindo as entradas do cliente em loop, causando bloqueio* para que o servidor não possa ouvir outro cliente duas vezes. Se você deseja implementá -lo, precisará usar as síncronas ou multithread * * @author tuzongxun123 * */ public class ChatServer {public static void main (string [] args) {// se o servidor é iniciado com sucesso boolean isStart = false; // servidor soket serversocket ss = null; // soquete de soquete do cliente soquete = nulo; // servidor Leia o fluxo de dados do cliente DatainputStream DatainputStream = null; tente {// iniciar servidor ss = new ServerSocket (8888); } catch (bindException e) {System.out.println ("Porta já está em uso"); // fechar o programa System.exit (0); } catch (Exceção e) {e.printStackTrace (); } tente {isStart = true; while (isStart) {boolean isConnect = false; // Inicie o soquete de escuta = ss.accept (); System.out.println ("One Client Connect"); isConnect = true; while (isConnect) {// Obtenha o fluxo de entrada do cliente DataAinputStream = new DatainputStream (Socket.getInputStream ()); // Leia os dados passados pela mensagem da String Client = DatainputStream.readUtf (); System.out.println ("Cliente diz:" + mensagem); }}} catch (eofexception e) {System.out.println ("Cliente fechado!"); } catch (Exceção e) {e.printStackTrace (); } finalmente {// feche o recurso relacionado tente {datainputStream.close (); Socket.Close (); } catch (ioexception e) {e.printStackTrace (); }}}}O exposto acima é o conhecimento relevante sobre o soquete Java, implementando uma função de bate -papo on -line simples (i) introduzida pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!