Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 13
  1. #1

    Lập trình socket trong Java, 1 server kết nối nhiều client trong Java như thế nào?

    mình đang học lập trình socket trong Java, giờ mình muốn 1 server kết nối được nhiều client thì phải làm thế nào?
    ban đầu mình có ý tưởng là làm một mảng client rồi gọi phương thức accept() cho từng client nhưng có vẻ không ổn. Search trên mạng thấy nói dùng Multi Thread. ai đã làm hay hiểu biết phần này giảng cho mình hiểu thêm với, có demo càng tốt. cảm ơn mọi người nhiều [IMG]images/smilies/daydreaming.gif[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi detective009
    mình đang học lập trình socket trong Java, giờ mình muốn 1 server kết nối được nhiều client thì phải làm thế nào?
    ban đầu mình có ý tưởng là làm một mảng client rồi gọi phương thức accept() cho từng client nhưng có vẻ không ổn. Search trên mạng thấy nói dùng Multi Thread. ai đã làm hay hiểu biết phần này giảng cho mình hiểu thêm với, có demo càng tốt. cảm ơn mọi người nhiều [IMG]images/smilies/daydreaming.gif[/IMG]
    Chính xác là dùng Multi Thread đấy.
    Cho server lắng nghe ở 1 thread. Khi có một client được accept() thì tạo một thread mới để xử lý client đó, server lại tiếp tục lắng nghe ...

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    mình có bài tập lớn về lập trình socket trong java, có vài vấn đề xin được mọi người giúp.
    mình làm bài tập bằng netbean, sử dụng giao diện ( trong netbean là jFrame có đúng k ? )

    - làm thế nào để client kết nối được với sever ( client gửi yêu cầu, sever sử lí rồi trả lời)?
    - dùng netbean thì chạy sever và client trên 1 máy được k ? có cần dùng máy ảo hay gì đó k?
    - mọi người có tài liệu về lập trình mạng, share cho mình với,đặc biệt là phần jFrame , mọi người giúp mình với... mình mới học nên chưa biết gì ( bạn nào có ví dụ share thì càng tốt, thanks all )

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn có thể tham khảo trong tài liệu mình share.

    • Client và Server có thể chạy trên cùng 1 máy, nhưng phải khác portĐể client kết nối với sever thì bạn phải học cái socket, mình thấy nó rất là đơn giản, lên google 1 phát là ra ah, đầy bài hướng dẫnTheo mình biết thì hình như 1 lúc 1 thằng netbean chỉ run đc 1 project, do đó bạn cần mở 2 cái netbean, 1 cái run server, 1 cái run client. Còn để mở 2 cái netbean 1 lúc thì google nhé

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi thanthoai101010
    mình có bài tập lớn về lập trình socket trong java, có vài vấn đề xin được mọi người giúp.
    mình làm bài tập bằng netbean, sử dụng giao diện ( trong netbean là jFrame có đúng k ? )

    - làm thế nào để client kết nối được với sever ( client gửi yêu cầu, sever sử lí rồi trả lời)?
    - dùng netbean thì chạy sever và client trên 1 máy được k ? có cần dùng máy ảo hay gì đó k?
    - mọi người có tài liệu về lập trình mạng, share cho mình với,đặc biệt là phần jFrame , mọi người giúp mình với... mình mới học nên chưa biết gì ( bạn nào có ví dụ share thì càng tốt, thanks all )
    cậu này sao lại nhảy vô topic của mình post bài hỏi riêng của bạn sao mất lịch sự thế! nhẽ ra phải ra ngoài lập topic mới chứ! nhìn cái nick bị baned thế kia là biết lắm rồi. đừng có vậy nữa nhé bạn

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi detective009
    mình đang học lập trình socket trong Java, giờ mình muốn 1 server kết nối được nhiều client thì phải làm thế nào?
    ban đầu mình có ý tưởng là làm một mảng client rồi gọi phương thức accept() cho từng client nhưng có vẻ không ổn. Search trên mạng thấy nói dùng Multi Thread. ai đã làm hay hiểu biết phần này giảng cho mình hiểu thêm với, có demo càng tốt. cảm ơn mọi người nhiều [IMG]images/smilies/daydreaming.gif[/IMG]
    Mình cũng đang học về socket. Hiện giờ thì mình đã tạo được Server và kết nối được với nhiều Client, có thể chat được từ Server với 1 trong các Client kết nối với nó, nhưng vấn đề là mình không làm được cho các Client kết nối và chat được với nhau T_T. Dù sao thì bác cũng chỉ cần Server kết nối được nhiều Client nên có thể tham khảo code này của mình

    P/S: Bác nào có thể thì giúp mình luôn nhé [IMG]images/smilies/smile.png[/IMG] Cám ơn trước
    # Server

    Mã:
    import java.io.*;import java.net.*; public class Server {    public static void main(String[] args) {        try{            ServerSocket serverSocket = new ServerSocket(8888);            System.out.println("Khởi chạy máy chủ thành công");            while(true){                //Tạo Thread mới khi có 1 Client kết nối thành công                new ThreadSocket(serverSocket.accept()).start();                System.out.println("Có 1 kết nối đến");            }        }        catch(IOException e){            System.out.println("Exception: " +e.getMessage());        }    }}
    # Client

    Mã:
    import java.io.*;import java.net.*; public class Client{     public static void main(String []args) throws IOException{          Socket ClientSocket = new Socket("localhost", 8888);         System.out.println("Kết nối thành công!");        //Tạo luồng nhận dữ liệu từ bàn phím        DataInputStream inFromUser = new DataInputStream(System.in);         //Tạo luồng nhận dữ liệu từ Server        DataInputStream inFromServer = new DataInputStream(ClientSocket.getInputStream());         //Tạo luồng gửi dữ liệu lên Server        DataOutputStream outToServer = new DataOutputStream(ClientSocket.getOutputStream());         while(true){            try{                 System.out.println("
    Client: ");                //Nhập dữ liệu nhập từ bàn phím rồi gửi lên Server                String ask = inFromUser.readLine();                 outToServer.writeBytes(ask+"
    ");                                //Đọc dữ liệu Server gửi về rồi in ra                String listen=inFromServer.readLine();                System.out.println("
    Server: "+listen);            }            catch(UnknownHostException e) {                 System.err.println("Không tìm thấy máy chủ");                 System.exit(1);             }            catch(IOException e){                 System.err.println("Không thể kết nối với máy chủ");                 System.exit(1);             }    }    } }
    # ThreadSocket

    Mã:
    import java.io.*;import java.net.*; public class ThreadSocket extends Thread{    Socket socket;    public ThreadSocket(Socket pSocket){        this.socket=pSocket;    }    @Override    public void run(){        try{            //Tạo luồng nhận dữ liệu từ bàn phím            DataInputStream inFromServer = new DataInputStream(System.in);            //Tạo luồng nhận dữ liệu từ Client            DataInputStream inFromClient = new DataInputStream(socket.getInputStream());            //Tạo luồng gửi dữ liệu về Client            DataOutputStream outToClient = new DataOutputStream(socket.getOutputStream());            while(true)            {                //Đọc dữ liệu từ Client gửi tới rồi in ra                String listen = inFromClient.readLine();                System.out.println("
    Client: "+listen);                                System.out.println("
    Server: ");                //Nhập dữ liệu từ bàn phím rồi gửi về Client                String ask = inFromServer.readLine();                outToClient.writeBytes(ask+"
    ");            }        }        catch(Exception e){            e.printStackTrace();        }    }}

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Source code java đơn giản dễ hiểu có thể tìm tại:
    http://java2s.com

    Để tạo một server làm việc với nhiều client thì phải tìm hiểu kỹ về Thread và cơ chế đồng bộ nhiều Thread trong java.

    Chú ý là trong main thread lắng nghe của server, ở vòng lặp while(true) nên để sleep theo một chu kỳ nào đó nhằm giảm việc chiếm tài nguyên của máy.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    đúng là dùng multy thread ..... tạo 1 class extends Thread ròi override phương thức run .... chú ý lúc gọi hàm start() vì đây là lúc mà thread sẽ chạy song song với chương trình... ở client sử dụng while( true) nếu các thread riêng rẻ ko quan hệ với nhau thì ổn...hơi khó quản lý việc quá tải

  9. #9
    Các bạn cho mình hỏi này : Có cách nào khác để viết chương trình phục vụ nhiều client kết nối tới mà không sử dụng vòng lặp vô hạn while(true)(bên server) ko ?

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi svcntt
    Các bạn cho mình hỏi này : Có cách nào khác để viết chương trình phục vụ nhiều client kết nối tới mà không sử dụng vòng lặp vô hạn while(true)(bên server) ko ?
    Có thể!
    Bạn dùng một timer và lập lịch cho nó. Cứ sau mỗi chu kỳ (ví dụ 1s) lại kiểm tra và xử lý các kết nối.

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •