Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Chat server-Client trong mạng lan sử dụng UDP

  1. #1
    Ngày gia nhập
    02 2012
    Bài viết
    21

    Mặc định Chat server-Client trong mạng lan sử dụng UDP

    Cho mình hỏi cách làm server có thể chat nhiều Client

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Bạn tham khảo code sau xem, Kevin lấy từ internet chưa có time test thử nhé:

    Java Code:
    1. // Chat client
    2. import java.net.*;
    3. import java.io.*;
    4. import java.util.*;
    5. import java.awt.*;
    6.  
    7. class chatClient extends Frame implements Runnable
    8. {
    9.     Socket soc;    
    10.     TextField tf;
    11.     TextArea ta;
    12.     Button btnSend,btnClose;
    13.     String sendTo;
    14.     String LoginName;
    15.     Thread t=null;
    16.     DataOutputStream dout;
    17.     DataInputStream din;
    18.     chatClient(String LoginName,String chatwith) throws Exception
    19.     {
    20.         super(LoginName);
    21.         this.LoginName=LoginName;
    22.         sendTo=chatwith;
    23.         tf=new TextField(50);
    24.         ta=new TextArea(50,50);
    25.         btnSend=new Button("Send");
    26.         btnClose=new Button("Close");
    27.         soc=new Socket("127.0.0.1",5217);
    28.  
    29.         din=new DataInputStream(soc.getInputStream());
    30.         dout=new DataOutputStream(soc.getOutputStream());        
    31.         dout.writeUTF(LoginName);
    32.  
    33.         t=new Thread(this);
    34.         t.start();
    35.  
    36.     }
    37.     void setup()
    38.     {
    39.         setSize(600,400);
    40.         setLayout(new GridLayout(2,1));
    41.  
    42.         add(ta);
    43.         Panel p=new Panel();
    44.        
    45.         p.add(tf);
    46.         p.add(btnSend);
    47.         p.add(btnClose);
    48.         add(p);
    49.         show();        
    50.     }
    51.     public boolean action(Event e,Object o)
    52.     {
    53.         if(e.arg.equals("Send"))
    54.         {
    55.             try
    56.             {
    57.                 dout.writeUTF(sendTo + " "  + "DATA" + " " + tf.getText().toString());            
    58.                 ta.append("\n" + LoginName + " Says:" + tf.getText().toString());    
    59.                 tf.setText("");
    60.             }
    61.             catch(Exception ex)
    62.             {
    63.             }    
    64.         }
    65.         elseif(e.arg.equals("Close"))
    66.         {
    67.             try
    68.             {
    69.                 dout.writeUTF(LoginName + " LOGOUT");
    70.                 System.exit(1);
    71.             }
    72.             catch(Exception ex)
    73.             {
    74.             }
    75.            
    76.         }
    77.        
    78.         return super.action(e,o);
    79.     }
    80.     publicstaticvoid main(String args[]) throws Exception
    81.     {
    82.         chatClient Client1=new chatClient(args[0],args[1]);
    83.         Client1.setup();                
    84.     }    
    85.     publicvoid run()
    86.     {        
    87.         while(true)
    88.         {
    89.             try
    90.             {
    91.                 ta.append( "\n" + sendTo + " Says :" + din.readUTF());
    92.                
    93.             }
    94.             catch(Exception ex)
    95.             {
    96.                 ex.printStackTrace();
    97.             }
    98.         }
    99.     }
    100. }

    Java Code:
    1. // Chat Server
    2. import java.net.*;
    3. import java.util.*;
    4. import java.io.*;
    5.  
    6. class chatServer
    7. {
    8.     static Vector ClientSockets;
    9.     static Vector LoginNames;
    10.    
    11.     chatServer() throws Exception
    12.     {
    13.         ServerSocket soc=new ServerSocket(5217);
    14.         ClientSockets=new Vector();
    15.         LoginNames=new Vector();
    16.  
    17.         while(true)
    18.         {    
    19.             Socket CSoc=soc.accept();        
    20.             AcceptClient obClient=new AcceptClient(CSoc);
    21.         }
    22.     }
    23.     publicstaticvoid main(String args[]) throws Exception
    24.     {
    25.        
    26.         chatServer ob=new chatServer();
    27.     }
    28.  
    29. class AcceptClient extends Thread
    30. {
    31.     Socket ClientSocket;
    32.     DataInputStream din;
    33.     DataOutputStream dout;
    34.     AcceptClient (Socket CSoc) throws Exception
    35.     {
    36.         ClientSocket=CSoc;
    37.  
    38.         din=new DataInputStream(ClientSocket.getInputStream());
    39.         dout=new DataOutputStream(ClientSocket.getOutputStream());
    40.        
    41.         String LoginName=din.readUTF();
    42.  
    43.         System.out.println("User Logged In :" + LoginName);
    44.         LoginNames.add(LoginName);
    45.         ClientSockets.add(ClientSocket);    
    46.         start();
    47.     }
    48.  
    49.     publicvoid run()
    50.     {
    51.         while(true)
    52.         {
    53.            
    54.             try
    55.             {
    56.                 String msgFromClient=new String();
    57.                 msgFromClient=din.readUTF();
    58.                 StringTokenizer st=new StringTokenizer(msgFromClient);
    59.                 String Sendto=st.nextToken();                
    60.                 String MsgType=st.nextToken();
    61.                 int iCount=0;
    62.    
    63.                 if(MsgType.equals("LOGOUT"))
    64.                 {
    65.                     for(iCount=0;iCount<LoginNames.size();iCount++)
    66.                     {
    67.                         if(LoginNames.elementAt(iCount).equals(Sendto))
    68.                         {
    69.                             LoginNames.removeElementAt(iCount);
    70.                             ClientSockets.removeElementAt(iCount);
    71.                             System.out.println("User " + Sendto +" Logged Out ...");
    72.                             break;
    73.                         }
    74.                     }
    75.    
    76.                 }
    77.                 else
    78.                 {
    79.                     String msg="";
    80.                     while(st.hasMoreTokens())
    81.                     {
    82.                         msg=msg+" " +st.nextToken();
    83.                     }
    84.                     for(iCount=0;iCount<LoginNames.size();iCount++)
    85.                     {
    86.                         if(LoginNames.elementAt(iCount).equals(Sendto))
    87.                         {    
    88.                             Socket tSoc=(Socket)ClientSockets.elementAt(iCount);                            
    89.                             DataOutputStream tdout=new DataOutputStream(tSoc.getOutputStream());
    90.                             tdout.writeUTF(msg);                            
    91.                             break;
    92.                         }
    93.                     }
    94.                     if(iCount==LoginNames.size())
    95.                     {
    96.                         dout.writeUTF("I am offline");
    97.                     }
    98.                     else
    99.                     {
    100.                        
    101.                     }
    102.                 }
    103.                 if(MsgType.equals("LOGOUT"))
    104.                 {
    105.                     break;
    106.                 }
    107.  
    108.             }
    109.             catch(Exception ex)
    110.             {
    111.                 ex.printStackTrace();
    112.             }
    113.            
    114.            
    115.            
    116.         }        
    117.     }
    118. }
    119. }
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    10 2008
    Bài viết
    37

    Dear all,
    Ý tưởng chat nhiều client như sau nhé:
    sever :
    - bạn start 1 listener ( kế thừa runable và while = true )
    - Nếu bạn thấy 1 connection đến thì bạn apcept nó và đẩy vào queue sử lý
    - 1 tiến trình sử lý lấy từ queue ra và start 1 thread để đáp ứng với yêu cầu client

    Đây là cách đơn giản nhất cho mutithread nhé bạn, bạn làm thử nếu mắc gọi mình hỗ trợ nhé. Sau khi làm ok bạn có thể tham khảo các giải pháp khách như java nio, threadpool

  4. #4
    Ngày gia nhập
    07 2016
    Nơi ở
    Hà Nội
    Bài viết
    218

    cảm ơn ad nhiều, mình học hỏi thêm được nhiều điều mới.
    NHẬN CODE THUÊ ĐỒ ÁN - BÀI TẬP LỚN
    TẤT CẢ CÁC NGÔN NGỮ LẬP TRÌNH. HOÀN THÀNH NHANH CHÓNG, HIỆU QUẢ
    Số điện thoại: 01629732025 Email: codethuexyz@gmail.com facebook https://www.facebook.com/codethuedoancntt

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn