java tcp模拟聊天小程序

1、创建一个服务端、和客户端的两个类

   服务端:

     a、界面 一个文本域、一个本本框、一个滚动条、一个按钮、一个面板

     文本域设置为不可编辑

       按钮加一个监听器、文本框加一个键盘监听器

      b、创建ServerSocket类->等待

package www.mdxy;


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;

public class TastServer extends JFrame implements ActionListener, KeyListener {
    public static void main(String[] args) {
        new TastServer();
    }
    //1、一个按钮
    private JButton jb;
    //2、一个文本框
    private JTextField jtf;
    //3、一个文本域
    private JTextArea jta;
    //4、一个面板
    private JPanel jp;
    //滚动条
    private JScrollBar js;
    //端口号
    private static int prot;
    //输出流
    BufferedWriter bw;

    static {
        Properties properties = new Properties();
        try {
            properties.load(new FileReader("src/chat.properties"));
            prot= Integer.parseInt(properties.getProperty("Serverprot"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public TastServer(){
        jb=new JButton("发送");
        //加一个监听器
        jb.addActionListener(this);
        jtf=new JTextField(15);
        //加一个键盘监听器
        jtf.addKeyListener((KeyListener) this);
        jta=new JTextArea();
        jta.setEditable(false);
        jp=new JPanel();
        js=new JScrollBar();
        js.add(jta);

        jp.add(jtf);
        jp.add(jb);

        this.add(jta, BorderLayout.CENTER);
        this.add(jp,BorderLayout.SOUTH);
        //关闭
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //是否可见
        this.setVisible(true);
        //大小
        this.setBounds(300,300,300,300);
        //标题
        this.setTitle("聊天室");


        /******** 开始 ***********/
        //1、建立serverSocket对象
        try {
            ServerSocket serverSocket = new ServerSocket(prot);
            //2、等待连接
            Socket s = serverSocket.accept();
            //3、获取输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //4、获取输出流
            bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

            String line=null;
            while ((line=br.readLine())!=null){
                jta.append(line+System.lineSeparator());
            }
            //5、关闭资源
            bw.close();
            br.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        /******** 结束 ***********/
    }

    public void Client(){
        //获取文本框的文字
        String text = jtf.getText();
        //文字换行
        text="小明 : "+text;
        //自己显示
        jta.append(text+System.lineSeparator());
        //发送
        try {
            bw.write(text);
            bw.newLine();
            bw.flush();
            //清空
            jtf.setText("");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    @Override
    public void actionPerformed(ActionEvent e) {
        Client();
    }
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode()==KeyEvent.VK_ENTER){
            Client();
        }
    }
    @Override
    public void keyTyped(KeyEvent e) {

    }
    @Override
    public void keyReleased(KeyEvent e) {

    }
}

连接->获取输入流->获取输出流->关闭资源

各户端

      a、界面和服务端一样

      b、用端口来和服务端连接(端口号一样

        创建一个Socket()类和服务端连接 IP 地址和 端口号->获取输入流->获取输出流->关闭资源

package www.mdxy;


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.net.Socket;
import java.util.Properties;

public class TastClient extends JFrame implements ActionListener, KeyListener {
    public static void main(String[] args) {
        new TastClient();
    }
    //1、一个按钮
    private JButton jb;
    //2、一个文本框
    private JTextField jtf;
    //3、一个文本域
    private JTextArea jta;
    //4、一个面板
    private JPanel jp;
    //滚动条
    private JScrollBar js;
    //端口号
    private static int prot;
    //ip
    private static String ip;
    //输出流
    BufferedWriter bw;

    static {
        Properties properties = new Properties();
        try {
            properties.load(new FileReader("src/chat.properties"));
            prot= Integer.parseInt(properties.getProperty("Serverprot"));
            ip=properties.getProperty("ClientIP");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public TastClient() {
        jb = new JButton("发送");
        //加一个监听器
        jb.addActionListener(this);
        jtf = new JTextField(15);
        //加一个键盘监听器
        jtf.addKeyListener((KeyListener) this);
        jta = new JTextArea();
        jta.setEditable(false);
        jp = new JPanel();
        js = new JScrollBar();
        js.add(jta);

        jp.add(jtf);
        jp.add(jb);

        this.add(jta, BorderLayout.CENTER);
        this.add(jp, BorderLayout.SOUTH);
        //关闭
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //是否可见
        this.setVisible(true);
        //大小
        this.setBounds(300, 300, 300, 300);
        //标题
        this.setTitle("聊天室");

        /******** 开始 ********/
        //建立socket连接
        try {
            Socket socket = new Socket(ip, prot);
            //获取输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            //获取输出流
            bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

            String line=null;

            while ((line=br.readLine())!=null){
                jta.append(line+ System.lineSeparator());
            }
            //关闭资源
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        /******** 结束 ********/
    }
        public void Client () {
            //获取文本框的文字
            String text = jtf.getText();
            //文字换行
            text = "李四 : " + text;
            //自己显示
            jta.append(text + System.lineSeparator());
            //发送
            try {
                bw.write(text);
                bw.newLine();
                bw.flush();
                //清空
                jtf.setText("");
            } catch (IOException e) {
                e.printStackTrace();
            }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Client();
    }
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode()==KeyEvent.VK_ENTER){
            Client();
        }
    }
    @Override
    public void keyTyped(KeyEvent e) {
    }
    @Override
    public void keyReleased(KeyEvent e) {
    }
}

还有配置文件

有IP和端口号

Serverprot=8888
Clientprot=8888
ClientIP=127.0.0.1


版权声明:本文为m0_69007223原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。