| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
SimoneNewco
8年前发布

一个Java实现的简单的多个客户端聊天程序

客户端

import java.awt.*;  import java.awt.event.*;  import java.io.*;  import java.lang.*;  import java.net.*;    public class HeartClient extends Frame {        /*       *  成员方法出场...       */      private TextField tfText;      private TextArea taContent;      private Socket s;      private DataOutputStream dos;      private DataInputStream dis;        /**       * 注意,入口... ^^       * @param args       */      public static void main(String[] args) {          new HeartClient().launchFrame();        }        /**       * Loading GU       */      public void launchFrame(){          tfText = new TextField();          taContent = new TextArea();          this.setSize(300,300);          this.setLocation(300,300);          this.tfText.addActionListener(new TFListener());          this.add(tfText,BorderLayout.SOUTH);          this.add(taContent,BorderLayout.NORTH);          this.addWindowListener(new WindowAdapter(){              @Override              public void windowClosing(WindowEvent e) {                  System.exit(0);              }});          this.pack();          this.connect();          this.setVisible(true);      }        /**       * 我在努力地连接服务器中...       */      public void connect() {          try {              s = new Socket("127.0.0.1",1720);              dos = new DataOutputStream(s.getOutputStream());              dis = new DataInputStream(s.getInputStream());              new Thread(new SendThread()).start();  //          dos.writeUTF("Hello,i find u!");          } catch (UnknownHostException e) {              System.out.println("UnknownHostException");              e.printStackTrace();          } catch (IOException e) {              System.out.println("IOException");              e.printStackTrace();          }finally{              //关闭啥尼...          }        }        /**       * 额不会傻等着tfText(TextField tfText的监听器类)       */      class TFListener implements ActionListener{          private String str;          @Override          public void actionPerformed(ActionEvent e) {              str = tfText.getText().trim();              tfText.setText("");              try {                  dos.writeUTF(str);              } catch (IOException e1) {                  System.out.println("IOException");                  e1.printStackTrace();              }          }        }        /**       * 客户端接收消息的线程呦...       *       */      class SendThread implements Runnable{          private String str;          private boolean iConnect = false;            public void run(){              iConnect = true;              recMsg();            }            /**           * 消息,看招,哪里跑...(客户端接收消息的实现)           * @throws IOException            */          public void recMsg() {              try {                  while(iConnect){                      str = dis.readUTF();                      taContent.setText(str);                  }              } catch (IOException e) {                  e.printStackTrace();              }            }        }    }
                                服务器端  
import java.io.*;  import java.net.*;  import java.util.*;    public class HeartServer {        /*       * 成员变量闪亮登场       */      List<ClientThread> clients = new ArrayList<ClientThread>();        /**       * 这系入口啊,向这里看齐...       * @param args       */      public static void main(String[] args) {          new HeartServer().start();      }        /**       * 启动服务器中...       *       */      public void start(){          try {              boolean iConnect = false;              ServerSocket ss = new ServerSocket(1720);              iConnect = true;              while(iConnect){  System.out.println("绑定服务器端口成功!");                  Socket s = ss.accept();                  ClientThread currentClient = new ClientThread(s);//创建线程引用  System.out.println("发现客户端!");                  clients.add(currentClient);//把当前客户端加入集合                  new Thread(currentClient).start();  System.out.println("客户端进程已经启动!");              }          } catch (IOException e) {              System.out.println("IOException");              e.printStackTrace();          }      }        /**       * 给每个客户端留个家(客户端的进程)       *       */      class ClientThread implements Runnable {          /*           * 成员变量又来啦...           */          private Socket s;          private DataInputStream dis;          private DataOutputStream dos;          private String str;          private boolean iConnect = false;            /**           * 小构一下           */          ClientThread(Socket s){              this.s = s;              iConnect = true;          }            public void run(){  System.out.println("run方法启动了!");              try {                    while(iConnect){  System.out.println("RUN方法中的while循环启动,正在等待客户端的发送消息...");                      dis = new DataInputStream(s.getInputStream());                      str = dis.readUTF();  System.out.println(str);                      for(int i=0; i<clients.size(); i++){  System.out.println("转发消息中..."+i);                          ClientThread c = clients.get(i);                          c.sendMsg(str);                      }                  }              } catch (IOException e) {                  e.printStackTrace();              }            }            /**           * 转发消息,我做主...           * 将送至服务器的消息发送给每个连接到的客户端           */          public void sendMsg(String str){              try {  System.out.println("创建输出管道!");                  dos = new DataOutputStream(this.s.getOutputStream());  System.out.println("正在向客户端写消息!");                  dos.writeUTF(str);  System.out.println("正在向客户端写消息成功!");                       } catch (IOException e) {                  e.printStackTrace();              }            }        }    }