SWUST--Java實驗(七) 客戶端與伺服器聊天實現
阿新 • • 發佈:2018-11-11
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); } }