java实验 基于GUI的网络通信程序设计

服务器端

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

public class Server {
    private static ServerSocket serverSocket = null;
    private static Socket socket = null;
    public static void main(String[] args){
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("服务端");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setBounds(300, 200, 500, 300);
        frame.setLayout(new BorderLayout(10, 0));

        JPanel northPanel = new JPanel();
        JLabel portLabel = new JLabel("Port: ");
        JTextField portField = new JTextField(28);
        northPanel.setBorder(BorderFactory.createTitledBorder("服务器设置: "));
        JButton startBtn = new JButton("Start");
        northPanel.add(portLabel);
        northPanel.add(portField);
        northPanel.add(startBtn);

        JPanel centerPanel = new JPanel();
        JTextArea area = new JTextArea(10, 35);
        area.setMargin(new Insets(10, 10, 10, 10));
        area.setEnabled(false);
        centerPanel.add(area);

        JPanel southPanel = new JPanel();
        JLabel sayLabel = new JLabel("Say: ");
        JTextField sayField = new JTextField(30);
        JButton sayBtn = new JButton("Say");
        southPanel.add(sayLabel);
        southPanel.add(sayField);
        southPanel.add(sayBtn);

        frame.add(northPanel, BorderLayout.NORTH);
        frame.add(centerPanel, BorderLayout.CENTER);
        frame.add(southPanel, BorderLayout.SOUTH);

        frame.setVisible(true);

        startBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                area.append("Server starting…\n");
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            serverSocket = new ServerSocket(Integer.parseInt(portField.getText()));
                            socket = serverSocket.accept();
                            area.append("Client connected…\n");
                            while(true){
                                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                String res = null;
                                while((res = br.readLine()) != null){
                                    area.append(res + "\n");
                                }
                            }
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                    }
                }).start();
            }
        });

        sayBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try{
                    PrintWriter pw = new PrintWriter(socket.getOutputStream());
                    pw.println(sayField.getText());
                    pw.flush();
                    area.append(sayField.getText() + "\n");
                }catch (IOException ex){
                    ex.printStackTrace();
                }
            }
        });
    }
}

//大吉大利,今晚AC

客户端

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;

public class Client {
    private static Socket socket = null;
    public static void main(String[] args){
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("客户端");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setBounds(300, 200, 500, 300);
        frame.setLayout(new BorderLayout(10, 0));

        JPanel northPanel = new JPanel();
        JLabel ipLabel = new JLabel("Server Ip: ");
        JTextField ipField = new JTextField(10);
        JLabel portLabel = new JLabel("Server Port: ");
        JTextField portField = new JTextField(6);
        northPanel.setBorder(BorderFactory.createTitledBorder("客户机设置: "));
        JButton connectBtn = new JButton("Connect");
        northPanel.add(ipLabel);
        northPanel.add(ipField);
        northPanel.add(portLabel);
        northPanel.add(portField);
        northPanel.add(connectBtn);

        JPanel centerPanel = new JPanel();
        JTextArea area = new JTextArea(10, 35);
        area.setMargin(new Insets(10, 10, 10, 10));
        area.setEnabled(false);
        centerPanel.add(area);

        JPanel southPanel = new JPanel();
        JLabel sayLabel = new JLabel("Say: ");
        JTextField sayField = new JTextField(30);
        JButton sayBtn = new JButton("Say");
        southPanel.add(sayLabel);
        southPanel.add(sayField);
        southPanel.add(sayBtn);

        frame.add(northPanel, BorderLayout.NORTH);
        frame.add(centerPanel, BorderLayout.CENTER);
        frame.add(southPanel, BorderLayout.SOUTH);

        frame.setVisible(true);

        connectBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                area.append("Connect to server…\n");
                try {
                    socket = new Socket(ipField.getText(), Integer.parseInt(portField.getText()));
                }catch (IOException ex){
                    ex.printStackTrace();
                }
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            while(true){
                                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                String res = null;
                                while((res = br.readLine()) != null){
                                    area.append(res + "\n");
                                }
                            }
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                    }
                }).start();
            }
        });

        sayBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try{
                    PrintWriter pw = new PrintWriter(socket.getOutputStream());
                    pw.println(sayField.getText());
                    pw.flush();
                    area.append(sayField.getText() + "\n");
                }catch (IOException ex){
                    ex.printStackTrace();
                }
            }
        });
    }
}

//大吉大利,今晚AC

猜你喜欢

转载自blog.csdn.net/lalala_HFUT/article/details/89382518
今日推荐