SWUST--Java实验(七) 客户端与服务器聊天实现


import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import javax.swing.ScrollPaneConstants;
import javax.swing.JTextField;
import javax.net.SocketFactory;
import javax.swing.JButton;

public class MyClient extends JFrame {

	private JPanel contentPane;
	private static JTextField jf = new JTextField();
	static JTextArea jta = new JTextArea();
	static JButton bt = new JButton("\u53D1\u9001");
	static Scanner sc =new Scanner(System.in);
	static Socket socket;


	/**
	 * Launch the application.
	 * 
	 * @throws IOException
	 * @throws UnknownHostException
	 */

	public static void main(String[] args) throws UnknownHostException, IOException {
		new MyClient();
		socket = new Socket("localhost", 12345);//创建本机socket
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		new SendThread(br).start();//启动读的线程
	}
	/**
	 * Create the frame.
	 */
	public MyClient() {
		setTitle("\u5BA2\u6237\u7AEF");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 229, 317);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JPanel panel = new JPanel();
		panel.setBounds(0, 0, 213, 226);
		contentPane.add(panel);
		panel.setLayout(new BorderLayout(0, 0));

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		panel.add(scrollPane, BorderLayout.CENTER);
		jta.setEditable(false);

		jta.setLineWrap(true);
		jta.setFont(new Font("幼圆", Font.PLAIN, 16));
		scrollPane.setViewportView(jta);

		jf.setFont(new Font("幼圆", Font.PLAIN, 16));
		jf.setBounds(0, 236, 133, 33);
		contentPane.add(jf);
		jf.setColumns(10);
		setVisible(true);

		bt.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {	
				try {
					PrintWriter pw = new PrintWriter(socket.getOutputStream());
					pw.println(jf.getText());
					pw.flush();
					jta.append("客户端:"+jf.getText()+'\n');
					jf.setText("");
				} catch (IOException e1) {
					e1.printStackTrace();
				}
				
			}
		});
		bt.setBounds(143, 236, 60, 33);
		contentPane.add(bt);
	}
	
	static class SendThread extends Thread {
		BufferedReader br;

		public SendThread(BufferedReader br) {
			super();
			this.br = br;
		}
		@Override
		public void run() {
			String line =null;
			try {
				while((line=br.readLine())!=null) {
					jta.append("服务器:" + line + '\n');
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.ScrollPaneConstants;
import javax.swing.JTextField;
import javax.swing.JButton;

public class MySever extends JFrame {

	private JPanel contentPane;
	private JTextField jf = new JTextField();
	static JTextArea jta = new JTextArea();
	static JButton bt = new JButton("\u53D1\u9001");
	static Socket accept;

	/**
	 * Launch the application.
	 * 
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {

		new MySever();
		ServerSocket sever = new ServerSocket(12345);
		accept = sever.accept();//接连进来的客户端
		BufferedReader br = new BufferedReader(new InputStreamReader(accept.getInputStream()));
		while (true) {
			String str = br.readLine();
			jta.append("客户端:" + str + '\n');
		}
	}

	/**
	 * Create the frame.
	 */
	public MySever() {
		setTitle("\u670D\u52A1\u5668");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 229, 317);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JPanel panel = new JPanel();
		panel.setBounds(0, 0, 213, 226);
		contentPane.add(panel);
		panel.setLayout(new BorderLayout(0, 0));

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		panel.add(scrollPane, BorderLayout.CENTER);
		jta.setEditable(false);

		jta.setLineWrap(true);
		jta.setFont(new Font("幼圆", Font.PLAIN, 16));
		scrollPane.setViewportView(jta);

		jf.setFont(new Font("幼圆", Font.PLAIN, 16));
		jf.setBounds(0, 236, 133, 33);
		contentPane.add(jf);
		jf.setColumns(10);

		bt.setBounds(143, 236, 60, 33);
		bt.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					PrintWriter pw = new PrintWriter(accept.getOutputStream());
					pw.println(jf.getText());
					pw.flush();//刷新缓冲区
					jta.append("服务器:" + jf.getText() + '\n');
					jf.setText("");
				} catch (IOException e) {
					e.printStackTrace();
				}

			}
		});
		contentPane.add(bt);
		setVisible(true);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41681743/article/details/82143452