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小测试