Este artigo descreve a implementação da sala de bate -papo com soquete com base no protocolo TCP na programação Java. Compartilhe -o para sua referência, como segue:
Aqui, os soquetes são usados para programação, que realiza uma comunicação dupla entre o servidor e o cliente com base no serviço confiável do TCP.
Lado do servidor do servidor:
pacote com.han; importar java.awt.container; importar java.awt.event.actionEvent; importar java.awt.event.actionListener; importar java.awt.event.windowadapter; importar java.awt.event.event. javax.swing.jscrollPane; importar javax.swing.jtextarea; importar javax.swing.jtextfield;/*** Este programa implementa a parte de programação do servidor de um programa TCP. * A programação usando soquetes é feita para obter uma comunicação dupla com o cliente com base no serviço confiável do TCP. * Consulte o cliente da classe Client neste pacote para programar * @author han * */ @supressorwarnings ("serial") servidor de classe pública estende JDialog {Private BufferredReader Reader; escritor privado de impressão; Servidor Servidor Privado; soquete privado soquete; private jtextarea ta = new jtextarea (); private jscrollPane sp = novo jscrollPane (TA); Private JTextField tf = new JTextfield (); Contêiner cc; servidor público (título da string) {Settitle (título); addWindowlistener (new windowAdapter () {public void windowclosing (WindowEvent nós) {dispete (); // revoga todos os recursos relacionados relacionados ao diálogo System.exit (0); // Saia do programa normalmente}}}); cc = getContentPane (); setLayout (nulo); ta.setLineWrap (true); ta.seteditable (falso); sp.setbounds (0,0,300.342); tf.setbounds (0,342,300,25); cc.add (sp); cc.add (tf); tf.addactionListener (new ActionListener () {public void ActionPerformed (ActionEvent e) {try {writer = new PrintWriter (soket.getOutputStream (), true);} catch (ioexception e1) {// TODO-Generated Block E1.PrintTeTATEN; ta.append ("user1:"+tf.getText ()+'/n'); } void getServer () {try {server = new ServerSocket (8998); ta.append ("O soquete do servidor foi criado com sucesso/n"); while (true) {ta.append ("Waiting for Client Connection/N"); soquete = server.accept (); ta.append ("cliente conectado/n"); leitor = new buffarrederader (new inputStreamReader (soket.getInputStream ())); getClientMessage (); }} catch (Exceção e) {e.printStackTrace (); }} private void getClientMessage () {try {while (true) {string news = reader.readline (); if (notícias! = null) {ta.append ("user2:"+news+"/n"); } else {ta.append ("user2 (cliente) desconectado/n"); quebrar; }}} catch (ioexception e) {// TODO BLOCO DE CATCH AUTOGERATION E.PRINTSTACKTRACE (); } tente {if (leitor! = null) {reader.close (); }} catch (ioexception e) {// TODO BLOCO DE CAPAGEM AUTOGERATION E.PRINTSTACKTRACE (); } if (soquete! = null) {tente {socket.close (); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); }}} public static void main (string [] args) {servidor user1 = new server ("user1"); user1.setBounds (0,0,300.400); user1.setResizable (false); user1.setVisible (true); user1.getServer (); }}Cliente cliente:
pacote com.han; importar java.awt.*; importar java.awt.event.*; importar java.io.*; importar java.net.*; importar javax.swing. * A programação usando soquetes é feita para obter uma comunicação dupla com o servidor com base no serviço confiável do TCP. * Consulte a classe de servidor neste pacote para programar o servidor * Ele pode ser executado em diferentes plataformas e máquinas diferentes, mas o endereço IP gravado no código deve ser modificado no endereço IP da máquina que executa o servidor servidor. * @author han * */ @supressão ("serial") public class Client estende JDialog {Private BufferredReader Reader; escritor privado de impressão; soquete privado soquete; private jtextarea ta = new jtextarea (); private jscrollPane sp = novo jscrollPane (TA); Private JTextField tf = new JTextfield (); Contêiner cc; public Client (String Title) {Settitle (Title); addWindowlistener (new windowAdapter () {public void windowclosing (WindowEvent nós) {dispete (); // revoga todos os recursos relacionados relacionados ao diálogo System.exit (0); // Saia do programa normalmente}}}); cc = getContentPane (); setLayout (nulo); ta.setLineWrap (true); ta.seteditable (falso); sp.setbounds (0,0,300.342); tf.setbounds (0,342,300,25); cc.add (sp); cc.add (tf); tf.addactionListener (new ActionListener () {public void ActionPerformed (ActionEvent e) {writer.println (tf.getText ()); ta.append ("user2:"+tf.getText ()+'/n); tf.settext (""); } private void Connect () {ta.append ("Tente conectar/n"); tente {socket = new Socket ("192.168.1.3", 8998); } catch (desconhecidoHosTexception e) {// TODO BLOCO DE CATAGEM AUTOGERATION E.PRINTSTACKTRACE (); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); } tente {writer = new PrintWriter (Socket.getOutputStream (), true); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); } ta.append ("Complete a conexão/n"); } private void getClientMessage () {try {reader = new BufferredReader (new InputStreamReader (Socket.getInputStream ())); while (true) {string news = reader.readline (); if (notícias! = null) {ta.append ("user1:"+news+"/n"); } else {ta.append ("user1 (servidor) foi desconectado e, quando o servidor é reconectado, reinicie o usuário2 (cliente) para comunicação/n"); quebrar; }}} catch (ioexception e) {// TODO BLOCO DE CAPAÇÃO AUTOMENTADO AUTOMENTADO E.PrintStackTrace (); } tente {if (leitor! = null) {reader.close (); }} catch (ioexception e) {// TODO BLOCO DE CAPAGEM AUTOGERATION E.PRINTSTACKTRACE (); } if (soquete! = null) {tente {socket.close (); } catch (ioexception e) {// TODO GATO GENERADO AUTOMENTADO BLOCO E.PRINTSTACKTRACE (); }}} public static void main (string [] args) {cliente user2 = new client ("user2"); user2.setBounds (0,0,300.400); user2.setVisible (true); user2.SetResizable (false); user2.Connect (); user2.getClientMessage (); }}Para obter mais informações sobre o conteúdo relacionado a Java, consulte os tópicos deste site: "Resumo das habilidades de programação do soquete Java", "Resumo dos arquivos Java e habilidades de operação de diretório", "Tutorial sobre estrutura de dados Java e algoritmo", "Resumo da operação Java Dom Node Skills" e "Resumo de Java Cache Skills Skills Operation Skills"
Espero que este artigo seja útil para a programação Java de todos.