Cho mình hỏi về Server/CLient

Discussion in 'Xây dựng ứng dụng server-client desktop' started by jimhawkins, 27/2/12.

  1. jimhawkins

    jimhawkins Member

    Mình có file java thế này
    Server
    PHP:
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.ArrayList;

    import javax.swing.*;
    public class 
    Server extends JFrame implements ActionListener
    {
        
    JTextArea ta;
        
    JTextField tf;
        
    JButton send;
        
    ServerSocket sk;

        
    DataInputStream dis;
        
    DataOutputStream dos;
        
    ArrayList<Socket> list=new ArrayList<Socket>();
        public 
    Server()
        {
            
    super("Server");
            
    setLayout(new FlowLayout(FlowLayout.CENTER));
            
    ta=new JTextArea();
            
    JScrollPane sc=new JScrollPane(ta);
            
    sc.setPreferredSize(new Dimension(400,400));
            
    add(sc);
            
    add(tf=new JTextField(30));
            
    add(send=new JButton("Send"));
            
    send.addActionListener(this);
            
    this.setSize(500,500);
            
    this.setVisible(true);
        }
        public 
    void actionPerformed(ActionEvent e)
        {
            try
            {
                
    ta.append("\nServer : "+tf.getText());
                for(
    Socket client:list)
                {
                    
    DataOutputStream pw=new DataOutputStream(client.getOutputStream());
                    
    pw.writeUTF(tf.getText());
                }
                
    tf.setText("");
            }catch (
    Exception ae) {
                
    ae.getMessage();
            }
        }
        public 
    void go()
        {
            try
            {
            
    ta.append("Server is opening ");
            
    sk=new ServerSocket(8080);
            while(
    true)
            {
                
    Socket socket=sk.accept();
                list.
    add(socket);
                
    ta.append("\n Client connected ");
                new 
    ThreadClient(socket).start();
            }
            }catch (
    Exception e) {
                
    e.getMessage();
            }
        }
        public static 
    void main(String []args)
        {
            new 
    Server().go();
        }
    class 
    ThreadClient extends Thread
    {
        
    Socket client;
        public 
    ThreadClient(Socket socket)
        {
            try
            {
            
    client=socket;
            
    dis=new DataInputStream(client.getInputStream());
            
    dos=new DataOutputStream(client.getOutputStream());
            }catch (
    Exception e) {
                
    e.getMessage();
            }
        }
        public 
    void run()
        {
            try
            {
            while(
    true)
            {
                
    String s=dis.readUTF();
                for(
    Socket client:list)
                {
                    
                }
                
    ta.append("\n Client : "+s);
            }
            }catch (
    Exception e) {
                
    e.getMessage();
            }
        }
       }
    }
    Client
    PHP:
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.Socket;
    import javax.swing.*;

    public class 
    Client extends JFrame implements ActionListener
    {
        
    JTextArea ta;
        
    JTextField tf;
        
    JButton send;
        
    Socket client;
        
    DataInputStream dis;
        
    DataOutputStream dos;
        public 
    Client()
        {
            
    super("Client");
            
    setLayout(new FlowLayout(FlowLayout.CENTER));
            
    ta=new JTextArea();
            
    JScrollPane sc=new JScrollPane(ta);
            
    sc.setPreferredSize(new Dimension(400,400));
            
    add(sc);
            
    add(tf=new JTextField(30));
            
    add(send=new JButton("Send"));
            
    send.addActionListener(this);
            
    this.setSize(500,500);
            
    this.setVisible(true);
        }
        public 
    void actionPerformed(ActionEvent e)
        {
            try
            {
                
    ta.append("\nClient : "+tf.getText());
                
    dos.writeUTF(tf.getText());
                
    tf.setText("");
            }catch (
    Exception ae) {
            
    ae.getMessage();
            }
        }
        public 
    void go()
        {
            try
            {
            
    client=new Socket("localhost",8080);
            
    dis=new DataInputStream(client.getInputStream());
            
    dos=new DataOutputStream(client.getOutputStream());
            while(
    true)
            {
                
    String s=dis.readUTF();
                
    ta.append("\nServer : "+s);
            }
            }catch (
    Exception e) {
                
    e.getMessage();
            }
        }
        public static 
    void main(String []args)
        {
            new 
    Client().go();
        }
    }
    Khi mình kết nối Client A đến Server thì 2 đứa đó chat qua lại với nhau được nhưng khi mình kết nối 1 client B nữa đến Server và gửi tin đến Server thì lúc náy Client B và Server chat với nhau được còn client A gửi lên Server thì Server không nhận được tin nữa,các bạn xem test giúp mình với,thêm vấn đề là làm sao 1 client khi gửi tin có thể gửi đến các client còn lại lun ,cảm ơn các bạn nhìu
  2. sayuri0903

    sayuri0903 Member

    Ðề: Cho mình hỏi về Server/CLient

    PHP:
    DataInputStream dis;
    DataOutputStream dos
    Bạn thử khai báo dis và dos vào từng thread riêng xem. Bạn khai báo dùng chung thế này, thằng sau tới, nó tạo mới stream đè cũ thằng client kia rồi.

    ---
    Để client có thể send cho tất cả, khi client send message lên server, từ server send lại cho tất cả là đc.

    @};-

Chia sẻ trang này