Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    server sau khi có kết nối thì tạo ra thread để quản lý kết nối đó
    Bên server bạn phải tạo 1 thread chính chờ các client kết nối vào.
    Sau khi có client kết nối vào thì tạo 1 thread phụ chờ nhận dữ liệu (khởi tạo hàm truyền nhận data - bất đồng bộ).
    Khi client ngắt kết nối sẽ xảy ra lỗi ở thread phụ này lúc này server bắt lỗi và thông báo về cho các client còn lại.

    Bạn nên trình bày code theo quy định diễn đàn nhé.
    Chúc may mắn.

  2. #2
    Ngày tham gia
    Dec 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Quy_ny
    Bên server bạn phải tạo 1 thread chính chờ các client kết nối vào.
    Sau khi có client kết nối vào thì tạo 1 thread phụ chờ nhận dữ liệu (khởi tạo hàm truyền nhận data - bất đồng bộ).
    Khi client ngắt kết nối sẽ xảy ra lỗi ở thread phụ này lúc này server bắt lỗi và thông báo về cho các client còn lại.

    Bạn nên trình bày code theo quy định diễn đàn nhé.
    Chúc may mắn.
    mình trình bày cụ thể hơn chút
    ở server mình có classs MainMultiThread là thread chính để lắng nghe client


    Mã:
    public class MainMultiThread {    // Declaration section:    // declare a server socket and a client socket for the server    // declare an input and an output stream        static  Socket clientSocket = null;    static  ServerSocket serverSocket = null;     // This chat server can accept up to 100 clients' connections     static  clientThread t[] = new clientThread[100];                   public static void main(String args[]) {                // The default port            int port_number=2222;                if (args.length < 1)        {            System.out.println("Usage: java MultiThreadChatServer 
    " + "Now using port number="+port_number);        } else {            port_number=Integer.valueOf(args[0]).intValue();        }                // Connect socket        try {            serverSocket = new ServerSocket(port_number);        }        catch (IOException e) {                 System.out.println(e);        }                //Connect database        connectDB con=new connectDB();        con.ConnectMySQL("smas","root","abc@123");                // Listening socket        while(true){            try {                clientSocket = serverSocket.accept();                for(int i=0; i<=99; i++){                    if(t[i]==null)                    {                        System.out.println("new client connected");                        (t[i] = new clientThread(clientSocket,t,i)).start();                        break;                    }                }            }            catch (IOException e) {                             System.out.println(e);            }        }    }}
    Mỗi client kết nối đến sẽ được quản lý bởi thread phụ clientThread


    Mã:
    class clientThread extends Thread{        DataInputStream is = null;    PrintStream os = null;    Socket clientSocket = null;    clientThread t[];    int myI;    boolean connected = true;        public TestClient objTestClient = new TestClient();        public clientThread(Socket clientSocket, clientThread[] t, int myI){    this.clientSocket=clientSocket;        this.t=t;        this.myI=myI;    }        public void run()     {        String strFromClient = "";                       try{            is = new DataInputStream(clientSocket.getInputStream());            os = new PrintStream(clientSocket.getOutputStream());                     while (connected) {                                try{                    strFromClient = is.readLine();                    if (strFromClient == null)                    {                        System.out.println("Client Disconnected!");                        connected = false;                    }                    else                    {                        System.out.println("String from client: "+ strFromClient);                    }                }                catch(java.net.SocketTimeoutException e) {                    System.out.println("Timed out trying to read from socket");                }            }                }        catch(IOException e){            System.out.println("FAIL");        };    }}
    Như thế đã đúng quy trình bạn nói rồi đúng ko? nhưng mình tắt client vẫn ko thấy server in ra gì hết ! bạn có thể edit giúp mình được ko ?

  3. #3
    Ngày tham gia
    Sep 2015
    Đang ở
    89 Tam Trinh - Hoàng Mai - Hà Nội
    Bài viết
    0

    Làm sao biết client ngắt kết nối với Server trong Java??

    Hi, mình gà về java nên muốn hỏi các bạn xíu
    mình viết một đoạn code bằng java để làm chuơng trình server, ví dụ có client B kết nối tới port C trên server A, vậy nếu client B này xảy ra sự cố (bị shutdown, đứt mạng... ?) thì làm sao server nhận biết được nhỉ (để xuất ra câu thông báo là client đã ngắt kết nối thôi) ? mình xem mấy code chat bằng java chỉ thấy client gửi chuỗi yêu cầu ngắt kết nối thì server ngắt kết nối ko à!
    [IMG]images/smilies/thinking.gif[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    client B này xảy ra sự cố (bị shutdown, đứt mạng... ?) thì tự động server quăng ra try catch. bạn dựa vào đó mà thông báo.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Quy_ny
    client B này xảy ra sự cố (bị shutdown, đứt mạng... ?) thì tự động server quăng ra try catch. bạn dựa vào đó mà thông báo.
    Mình làm như bạn nói
    server sau khi có kết nối thì tạo ra thread để quản lý kết nối đó
    code thread như bên dưới:


    Mã:
    class clientThread extends Thread{        DataInputStream is = null;    PrintStream os = null;    Socket clientSocket = null;    clientThread t[];    int myI;    boolean connected = true;            public clientThread(Socket clientSocket, clientThread[] t, int myI){    this.clientSocket=clientSocket;        this.t=t;        this.myI=myI;    }        public void run()     {        String strFromClient;        try{            is = new DataInputStream(clientSocket.getInputStream());            os = new PrintStream(clientSocket.getOutputStream());                            while (connected) {                                try{                    strFromClient = is.readLine();                    if (strFromClient == null)                       {                           System.out.println("Client Disconnected!");                           connected = false;                        }                                else {                                     System.out.println("Client Disconnected!");                                }                           }                           catch(java.net.SocketTimeoutException e) {                       System.out.println("Timed out trying to read from socket");                   }                      }                 }                 catch(IOException e){            System.out.println("FAIL");        };        }}
    Nhưng khi client đã kết nối tới server rồi, đã chạy thread rồi nhưng mình tắt client thì nó chả bắt cái ngoại lệ nào cả (chẳng in ra cái gì hết).

    Vậy sai ở chỗ nào nhỉ ?

 

 

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
  •