Socket通信客户端设计(Java)

  1 public class Client extends JFrame implements Runnable{
  2 
  3     private JPanel jPanel= new JPanel();
  4     private JLabel jLabel1=new JLabel("姓名: ");
  5     private JLabel jLabel2=new JLabel("端口: ");
  6     private JTextField jTextField1=new JTextField();
  7     private JTextField jTextField2=new JTextField();
  8     private JTextArea jTextArea=new JTextArea();
  9     private JTextField jTextField3=new JTextField();
 10     private JButton jButton=new JButton("发送(S)");
 11     
 12     private JScrollPane jScrollPane=new JScrollPane();
 13     private BufferedReader bufferedReader;
 14     private PrintWriter printWriter;
 15     private Socket socket;
 16     
 17     private static String title="劲爆聊天室";
 18     
 19     public Client(String port,String name){
 20         super(title+":"+name);
 21         this.setSize(377,387);
 22         this.add(jPanel);
 23         jPanel.setLayout(null);
 24         jTextArea.setEditable(false);
 25         //
 26         jPanel.add(jLabel1);
 27         jLabel1.setBounds(10, 10, 60, 20);
 28         jTextField1.setText(name);
 29         jTextField1.setEditable(false);
 30         jPanel.add(jTextField1);        
 31         jTextField1.setBounds(60, 10, 60, 21);
 32         
 33         jPanel.add(jLabel2);
 34         jLabel2.setBounds(125, 10, 60, 20);
 35         jTextField2.setText(port);
 36         jTextField2.setEditable(false);
 37         jPanel.add(jTextField2);
 38         jTextField2.setBounds(190, 10, 60, 21);;
 39         
 40         jPanel.add(jTextField3);
 41         jTextField3.setBounds(10, 270, 320, 21);
 42         
 43         jTextArea.setColumns(20);
 44         jTextArea.setRows(5);
 45         
 46         jTextArea.setEditable(false);
 47         jScrollPane.setViewportView(jTextArea);
 48         jPanel.add(jScrollPane);
 49         jScrollPane.setBounds(10, 42, 320, 220);
 50         
 51         jPanel.add(jButton);
 52         jButton.setBounds(250, 300, 80, 22);
 53         jButton.addActionListener(new ActionListener() {
 54             
 55             @Override
 56             public void actionPerformed(ActionEvent e) {
 57                 // TODO Auto-generated method stub
 58                 if(e.getSource()==jButton){
 59                     printWriter.println(jTextField1.getText()+": "+jTextField3.getText());
 60                     jTextField3.setText("");
 61                 }
 62             }
 63         });
 64         //Jtextfield不好控制啊。。。。
 65 /*        jTextField3.addActionListener(new ActionListener() {
 66             
 67             @Override
 68             public void actionPerformed(ActionEvent e) {
 69                 // TODO Auto-generated method stub
 70                 printWriter.println(jTextField1.getText()+":"+jTextField3.getText());
 71                 jTextField3.setText("");
 72             }
 73         });*/
 74         getSocket();
 75     }
 76     @Override
 77     public void run(){
 78         while(true)
 79         {
 80             try {
 81                 jTextArea.append(bufferedReader.readLine()+"\n");
 82                 
 83             } catch (Exception e) {
 84                 // TODO: handle exception
 85                 e.printStackTrace();
 86             }
 87         }
 88     }
 89     
 90     public void getSocket(){
 91         jTextArea.append("正在与劲爆聊天室进行连接..."+"\n");
 92         try {
 93             socket=new Socket("127.0.0.1",PortNumber.PORT.getNumber());
 94             jTextArea.append("劲爆聊天开始..."+"\n");
 95             bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
 96             printWriter=new PrintWriter(socket.getOutputStream(),true);
 97             new Thread(this).start();
 98         } catch (Exception e) {
 99             // TODO: handle exception
100             e.printStackTrace();
101         }
102     }
103     
104 }

考虑到多客户端,此处用到了多线程。Socket确实有意思....

非常感叹T公司如果把一个IM软件,做到亿级用户量,如何解决并发,如何解决Server的及时回应,如何完成数据存储...

想不出来了...

posted @ 2015-08-26 18:58  toto怎么会喝醉  阅读(238)  评论(0编辑  收藏  举报