JAVA tcp聊天室小实验

Server code:

package m08.d22;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

class MyJFrame extends JFrame {
    JLabel id = new JLabel("IP:");
    JTextField idfi = new JTextField(10);
    JLabel post = new JLabel("POST:");
    JTextField postfi = new JTextField(10);
    JButton conJB = null;
    JScrollPane sp;
    JTextArea area;
    JTextField f = null;
    ServerSocket server;
    Socket socket;
    BufferedInputStream inputStream;
    BufferedOutputStream out;
    MyJFrame() {
        super();
    }
    //JFrame create setVisible
    void createFrame() {
        setSize(400, 400);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        createTEXT();
        addTop();
        addCenter();
        setVisible(true);

    }
    //textComponent create
    void createTEXT() {
        area = new JTextArea();
        area.setEditable(false);
        area.append("wait con>>>>>\n");
        sp = new JScrollPane(area);
    }
    //return JButton add actionEvent
    JButton getConJB() {
        if (conJB == null) {
            conJB = new JButton("connect");
            conJB.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {

                    try {
                        Thread t = new Thread(new Runnable() {
                            @Override
                            public void run() {
                                setCon();
                            }
                        });
                        t.start();
                    } catch (Exception e1) {
                        e1.printStackTrace();
                        area.append(e1.getMessage());
                    }
                }
            });

        }
        return conJB;
    }
    //JButton event;socket create
    void setCon() {
        try {
            server = new ServerSocket(Integer.valueOf(postfi.getText()));
            area.append("Socket yes\n");
            while (true) {
                area.append("wait Contect!\n");
                socket = server.accept();
                area.append("Contect yes!\n");
                while(true) {
                    inputStream = new BufferedInputStream(socket.getInputStream());
                    byte[] by = new byte[1024];
                    int i = inputStream.read(by);
                    area.append("Client:" + new String(by, 0, i) + "\n");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //return field add actionevent
    JTextField getF() {
        if (f == null){
            f = new JTextField(20);
            f.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    byte[] by = f.getText().getBytes();
                    try {
                        out = new BufferedOutputStream(socket.getOutputStream());
                        out.write(by,0,by.length);
                        out.flush();
                        area.append("Server:" + f.getText() + "\n");
                        f.setText("");
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            });
        }
        return f;
    }
    //top label add
    void addTop() {
        Box boxN = Box.createVerticalBox();
        getContentPane().add(boxN, BorderLayout.NORTH);
        Box boxN_01 = Box.createHorizontalBox();
        boxN.add(boxN_01);
        boxN_01.add(Box.createHorizontalStrut(10));
        boxN_01.add(id);
        boxN_01.add(idfi);
        boxN_01.add(Box.createHorizontalStrut(10));
        boxN_01.add(post);
        boxN_01.add(postfi);
        boxN_01.add(getConJB());
        boxN_01.add(Box.createHorizontalStrut(10));
    }
    //Center text add
    void addCenter() {
        JPanel jp = new JPanel();
        jp.setLayout(new BorderLayout());
        jp.add(sp, BorderLayout.CENTER);
        jp.add(getF(), BorderLayout.SOUTH);
        getContentPane().add(jp, BorderLayout.CENTER);
    }
}

public class MyServer {
    public static void main(String[] args) {
        MyJFrame f = new MyJFrame();f.setTitle("Server");
        f.createFrame();
    }
}
Client code:

package m08.d22;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class MyClient extends MyJFrame {
    BufferedOutputStream out;
    Socket socket1;
    @Override
    JButton getConJB() {
        if(conJB == null) {
            conJB = new JButton("client");
            conJB.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try{
                        Thread t = new Thread(new Runnable() {
                            @Override
                            public void run() {
                                setCon();
                            }
                        });
                        t.start();
                    }catch(Exception e1) {
                        area.append("err con");
                    }
                }
            });

        }
        return conJB;
    }
    @Override
    void setCon() {
        try {
            socket = new Socket(idfi.getText(),Integer.valueOf(postfi.getText()));
            area.append("Connect Server!\n");
            inputStream = new BufferedInputStream(socket.getInputStream());
            while (true){
                byte[] by = new byte[1024];
                int i = inputStream.read(by);
                area.append("Server:" + new String(by, 0, i) + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    JTextField getF() {
        if (f == null){
            f = new JTextField(20);
            f.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    byte[] by = f.getText().getBytes();
                    try {
                        out = new BufferedOutputStream(socket.getOutputStream());
                        out.write(by,0,by.length);
                        out.flush();
                        area.append("Client:" + f.getText() + "\n");
                        f.setText("");
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            });
        }
        return f;
    }
    public static void main(String[] args) {
        MyClient c = new MyClient();c.setTitle("Client");
        c.createFrame();
    }
}
有点bug  JAVA.SE小测试

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值