Java TCP客户端与服务端通信(聊天)

客户端:

package com.xr.lampsdk;

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.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * @Description: tcp 客户端
 */

public class MyClient extends JFrame implements ActionListener {

    JTextArea jta = null;
    JTextField jtf = null;
    JButton jb = null;
    JPanel jp1 = null;
    JScrollPane jsp = null;
    PrintWriter pw = null;

    public static void main(String[] args) {
        new MyClient();
    }

    public MyClient() {
        jta = new JTextArea();
        jta.setLineWrap(true);    //设置文本域中的文本为自动换行
        jta.setForeground(Color.BLACK);    //设置组件的背景色
        jta.setFont(new Font("楷体", Font.BOLD, 28));    //修改字体样式
        jta.setBackground(Color.WHITE);    //设置按钮背景色
        jsp = new JScrollPane(jta);
        jtf = new JTextField(50);
        jtf.setFont(new Font("楷体", Font.BOLD, 16));    //修改字体样式
        // 注册回车事件
        jtf.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {

            }

            @Override
            public void keyReleased(KeyEvent e) {

            }

            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    sendMessage();
                }
            }
        });

        jb = new JButton("发送");
        jb.addActionListener(this);// 注册一个监听事件
        Dimension preferredSize = new Dimension(80, 40);    //设置尺寸
        jb.setPreferredSize(preferredSize);    //设置按钮大小
        jp1 = new JPanel();
        jp1.add(jtf);
        jp1.add(jb);
        this.add(jsp, BorderLayout.CENTER);
        this.add(jp1, BorderLayout.SOUTH);
        this.setTitle("chat client");
        this.setSize(800, 800);
        this.setVisible(true);

        // 接收从服务端发送过来的消息
        try {
            Socket s = new Socket("192.168.10.33", 2222);
//            Socket s = new Socket("127.0.0.1", 2222);

            BufferedReader in = new BufferedReader(new InputStreamReader(s
                    .getInputStream()));
            pw = new PrintWriter(s.getOutputStream(), true);
            while (true) {
                String info = in.readLine();
                String str = null;
                if (jta.getText() == null || "".equals(jta.getText())) {
                    str = "Server:" + info;
//                    Jacobtest.textToSpeech("Server说:" + info);
                } else {
                    str = jta.getText() + "\r\nServer:" + info;
//                    Jacobtest.textToSpeech("Server说:" + info);
                }
                jta.setText(str);
                jta.setCaretPosition(jta.getDocument().getLength());
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    // 把信息给服务器端
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jb) {
            sendMessage();

        }
    }


    /**
     * @throws
     * @Description: 发送消息给服务器端
     */
    public void sendMessage() {
        String info = jtf.getText();
        pw.println(info);
        pw.flush();
        jtf.setText("");
        if (jta.getText() == null || "".equals(jta.getText())) {
            jta.append("Client:" + info);
//            Jacobtest.textToSpeech("Client说:" + info);
        } else {
            jta.append("\r\nClient:" + info);
//            Jacobtest.textToSpeech("Client说:" + info);
        }
        jta.setCaretPosition(jta.getDocument().getLength());// 设置滚动条自动滚动
    }

}

服务端:

package com.xr.lampsdk;


/**
 * SDK灯控TCP客户端
 */

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.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 全双工通信服务器端
 *
 * @Description: 服务端
 */
public class MyServer extends JFrame implements ActionListener {
    JTextArea jta = null;
    JTextField jtf = null;
    JButton jb = null;
    JPanel jp1 = null;
    JScrollPane jsp = null;
    PrintWriter pw = null;

    public static void main(String[] args) {
        new MyServer();
    }

    public MyServer() {
        jta = new JTextArea();
        jta.setLineWrap(true);    //设置文本域中的文本为自动换行
        jta.setForeground(Color.BLACK);    //设置组件的背景色
        jta.setFont(new Font("楷体", Font.BOLD, 28));    //修改字体样式
        jta.setBackground(Color.WHITE);    //设置按钮背景色
        jsp = new JScrollPane(jta);
        jtf = new JTextField(50);
        jtf.setFont(new Font("楷体", Font.BOLD, 16));    //修改字体样式
        // 注册回车事件
        jtf.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    sendMessage();
                }
            }
        });
        jb = new JButton("发送");
        Dimension preferredSize = new Dimension(80, 40);    //设置尺寸
        jb.setPreferredSize(preferredSize);    //设置按钮大小
        jb.addActionListener(this);// 注册一个监听事件

        jp1 = new JPanel();
        jp1.add(jtf);
        jp1.add(jb);
        this.add(jsp, BorderLayout.CENTER);
        this.add(jp1, BorderLayout.SOUTH);
        this.setTitle("chat server");
        this.setSize(800, 800);
        this.setVisible(true);

        // 接收从客户端发送过来的消息
        try {
            ServerSocket ss = new ServerSocket(2222);
            Socket s = ss.accept();
            BufferedReader in = new BufferedReader(new InputStreamReader(s
                    .getInputStream()));
            pw = new PrintWriter(s.getOutputStream(), true);// 写成pw = new PrintWriter(s.getOutputStream())会有问题
            while (true) {
                String info = in.readLine();
                String str = null;
                if (jta.getText() == null || "".equals(jta.getText())) {
                    str = "Server:" + info;
//                    Jacobtest.textToSpeech("Server说:" + info);
                } else {
                    str = jta.getText() + "\r\nServer:" + info;
//                    Jacobtest.textToSpeech("Server说:" + info);
                }
                jta.setText(str);
                jta.setCaretPosition(jta.getDocument().getLength());
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    // 把信息给客户端
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if (e.getSource() == jb) {
            sendMessage();
        }
    }

    /**
     * @throws
     * @Description: 发送消息给客户端
     */
    public void sendMessage() {
        String info = jtf.getText();
        pw.println(info);
        pw.flush();
        jtf.setText("");
        if (jta.getText() == null || "".equals(jta.getText())) {
            jta.append("Client:" + info);
//            Jacobtest.textToSpeech("Client说:" + info);
        } else {
            jta.append("\r\nClient:" + info);
//            Jacobtest.textToSpeech("Client说:" + info);
        }

        jta.setCaretPosition(jta.getDocument().getLength());// 设置滚动条自动滚动
    }
}

猜你喜欢

转载自blog.csdn.net/seeblood/article/details/124195048