1. 程式人生 > >基於TCP協議的點對點通訊java程式,帶圖形介面

基於TCP協議的點對點通訊java程式,帶圖形介面

客戶端 package client; import java.awt.*; import java.awt.event.*; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.AbstractButton; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.text.Element; import javax.swing.text.html.ImageView; import client.Monitor1; public class Chatclient extends JFrame { TextField tftext = new TextField(50); static TextArea tfarea = new TextArea(); JButton button = new JButton("傳送"); static JButton button2 = new JButton("關閉"); Color c1 = new Color(000, 254, 007); static Socket s1; static DataOutputStream dos; static ImageIcon icon;     Image image; public static void main(String[] args) { new Chatclient().launchFrame(); // InputStream in; // OutputStream os; try { OutputStream os = s1.getOutputStream(); dos = new DataOutputStream(os); InputStream in = s1.getInputStream(); DataInputStream dis = new DataInputStream(in); while (true) { String ii = dis.readUTF(); System.out.println(ii); if (ii != null) { tfarea.append("Server說:" + ii + "\n"); } } } catch (IOException e1) { e1.printStackTrace(); } } public void launchFrame() {  JPanel panel = new JPanel()      {          protected void paintComponent(Graphics g)          {              g.drawImage(icon.getImage(), 0, 0, null);              super.paintComponent(g);          }      };      icon = new ImageIcon("image/1.jpg");          panel.setOpaque( false );          panel.setPreferredSize( new Dimension(510,285)); setLocation(400, 300); this.setSize(450, 280); this.setTitle("作者:(網路工程1101班)方雷江------聊天客戶端"); Panel p = new Panel(); Panel p2 = new Panel(); Panel p3 = new Panel(); Panel p4 = new Panel(); // this.add(new ImageView((Element) image)); p.add(new JLabel("對話方塊")); p.add(tfarea); p2.add(new JLabel("輸入框")); p2.add(tftext); p3.add(button); p3.add(button2); panel.add(p,BorderLayout.NORTH); panel.add(p2,BorderLayout.CENTER); panel.add(p3,BorderLayout.SOUTH); p4.add(new JLabel("@copyright方雷江")); this.add(p4,BorderLayout.SOUTH); this.add(panel); //tfarea.setBackground(c1); Monitor1 m1 = new Monitor1(); button2.addActionListener((ActionListener) m1); pack(); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); tftext.addActionListener(new TFlistener()); button.addActionListener(new TFlistener()); setVisible(true); tfarea.append("客戶端已啟動.........."+"\n"); connect(); } public void connect() { try { s1 = new Socket("127.0.0.1", 8888); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public class TFlistener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { String s = tftext.getText().trim(); tfarea.append("自己:   " + s + "\n"); tftext.setText(""); try { dos.writeUTF(s); dos.flush(); // dos.close(); } catch (IOException e1) { e1.printStackTrace(); } } } } class Monitor1 implements ActionListener{ public void actionPerformed(ActionEvent e) { System.exit(0); }  } 伺服器端 package server; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Panel; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import server.Monitor1; public class ChatServer { static JFrame f = new JFrame("作者:(網路工程1101班)方雷江------聊天伺服器端"); static TextField tftext = new TextField(50); static TextArea tfarea = new TextArea(); static JButton button = new JButton("傳送"); static JButton button2 = new JButton("關閉"); static ImageIcon pic  = new ImageIcon("image/01.png"); Socket s1; InputStream in; DataInputStream dis; OutputStream os; static DataOutputStream dos; static ImageIcon icon;     Image image; public ChatServer() { tftext.addActionListener(new TFlistener()); button.addActionListener(new TFlistener()); } public static void main(String[] args) { new ChatServer();  JPanel panel = new JPanel()      {          protected void paintComponent(Graphics g)          {              g.drawImage(icon.getImage(), 0, 0, null);              super.paintComponent(g);          }      };      icon = new ImageIcon("image/1.jpg");           panel.setOpaque( false );           panel.setPreferredSize( new Dimension(510,285));       Panel p = new Panel(); Panel p2 = new Panel(); Panel p3 = new Panel(); Panel p4 = new Panel(); p.add(new JLabel("對話方塊")); p.add(tfarea); p2.add(new JLabel("輸入框")); p2.add(tftext); p3.add(button); p3.add(button2); p4.add(new JLabel("@copyright方雷江")); panel.add(p,BorderLayout.NORTH); panel.add(p2,BorderLayout.CENTER); panel.add(p3,BorderLayout.SOUTH); f.add(p4,BorderLayout.SOUTH); //tfarea.setBackground(Color.green); f.add(panel); f.setSize(550, 330); Monitor1 m1 = new Monitor1(); button2.addActionListener((ActionListener) m1); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); connect(); } static boolean started = false; public static void connect() { try { ServerSocket ss = new ServerSocket(8888); started = true; while (started) { boolean connected = false; Socket s1 = ss.accept(); connected = true; System.out.println("有一個客戶端連線上了"); tfarea.append("有一個客戶端連線上了.........."+"\n"); // 讀進 InputStream in = s1.getInputStream(); DataInputStream dis = new DataInputStream(in); // 寫出 OutputStream os = s1.getOutputStream(); dos = new DataOutputStream(os); while (connected) { String ii = dis.readUTF(); System.out.println(ii); if (ii != null) { tfarea.append("Client說:" + ii + "\n"); } } s1.close(); dis.close(); } } catch (IOException e) { e.printStackTrace(); e.printStackTrace(); System.out.println("程式執行出錯了"); } } public class TFlistener implements ActionListener { public void actionPerformed(ActionEvent e) { String s = tftext.getText().trim(); tfarea.append("自己:   " + s + "\n"); tftext.setText(""); //System.out.println("本人   :" + s); try { dos.writeUTF(s); dos.flush(); // dos.close(); } catch (IOException e1) { e1.printStackTrace(); } } } } class Monitor1 implements ActionListener{ public void actionPerformed(ActionEvent e) { System.exit(0); }  }