Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Dùng Thread bị lỗi chỉ có 1 client kết nối tới Sever được?

  1. #1
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Mặc định Dùng Thread bị lỗi chỉ có 1 client kết nối tới Sever được?

    Cho mình hỏi là sao mình dùng Thread để viết ứng dụng bằng socket sao cho đồng thời nhiều clinet có thể kết nối 1 sever và mỗi clinet có 1 thread.Nhưng code mình viết chỉ có 1 client kết nối được các client sau không thể kết nối và Sever .Các bạn xem giúp mình lỗi chỗ nào nha!
    http://www.mediafire.com/?jilk8ipzno61o5e

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn làm sai chỗ accept. Accept phải được diễn ra nhiều lần, 1 lần accept sẽ tương ứng với 1 client kết nối tới. Trong code của bạn, mình thấy bạn chỉ accept 1 lần duy nhất trong constructor của class -> cái này rất rất ư là sai. Muốn đón được nhiều kết nối từ client, bạn phải có 1 vòng lặp, bên trong bạn sẽ gọi hàm accept liên tục, accept xong thì tạo thread với socket vừa accept được.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    05 2010
    Bài viết
    344

    Bạn cũng có thể tạo 1 hàm trong hàm đó tạo luồng mới, trong luồng đó bạn sẽ tạo accept. Xong 1 lần accept thì bạn lại chạy chính cái hàm đó là oke

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi tuandoi1 Xem bài viết
    Bạn cũng có thể tạo 1 hàm trong hàm đó tạo luồng mới, trong luồng đó bạn sẽ tạo accept. Xong 1 lần accept thì bạn lại chạy chính cái hàm đó là oke
    Cách của bạn có thể giải quyết được vấn đề nhưng mà nó mang tính chất workaround quá nhiều. 1 hàm gọi đi gọi lại chính nó liệu có xảy ra đệ quy ko ngừng ? Hơn nữa nó biến chương trình thành một mớ hỗn độn, class ko ra class, mà cấu trúc cũng ko thành cấu trúc. Vì vậy mình cho rằng nếu đã cất công sửa thì sửa lại kiến trúc, tổ chức lại kết cấu chương trình cho tốt chứ ko nên workaround theo kiểu chắp vá như vậy.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Cam on ban meo con nhieu nha! Minh sua lai duoc roi!

  6. #6
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Mặc định Dùng Thread bị lỗi chỉ có 1 client kết nối tới Sever được?

    ah bạn mèo con ơi mình dùng một vòng lặp while cho sever liên tục listen thi các clien hoạt động bình thường nhưng khi các client kết thúc thì sever cứ đứng đó nghe hoài nên báo lỗi.Bạn cho mình hỏi là tại Sever làm sao biết khi nào tất cả các thread cho các client đã kết thúc để thoát khỏi vòng lặp while vậy?

  7. #7
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình ko hiểu ? Nếu ko có client connect vào thì hàm accept sẽ đứng hoài luôn, đâu có chuyện báo lỗi, ko lẽ bạn lại đóng socket dùng để listen của hàm accept ? Bạn chỉ được đóng socket mà hàm accept trả ra thôi. Còn chuyện đếm thread thì bạn chỉ cần dùng 1 biến đếm là được rồi. Khi thread chạy, bạn tăng biến đếm lên, thread sắp thoát bạn giảm biến đếm đi.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  8. #8
    Ngày gia nhập
    03 2010
    Bài viết
    72

    Bạn noí đ1ung rồi nó không báo lỗi nhưng sau khi client thoát hết ra thì sever cứ đứng vậy hoài phải bấm tắt chương trình thì nó mới thoát (đứng tại hàm Accept).Vậy mình giải quyết sao giờ?

  9. #9
    Ngày gia nhập
    05 2010
    Bài viết
    344

    Trích dẫn Nguyên bản được gửi bởi tto_1991 Xem bài viết
    Bạn noí đ1ung rồi nó không báo lỗi nhưng sau khi client thoát hết ra thì sever cứ đứng vậy hoài phải bấm tắt chương trình thì nó mới thoát (đứng tại hàm Accept).Vậy mình giải quyết sao giờ?
    Nếu bạn làm bằng console thì ko nói còn bạn làm bằng from thì đúng là hơi mệt. Nhưng mà bạn có thể làm thế này.
    Khi chạy hàm Main. Trong hàm main bạn tạo một thread mới. Thread đó chịu trách nhiệm làm các việc bạn cần như anh mèo phía trên nói. Hàm main như thế sẽ rảnh, bạn muốn làm gì thì làm, chương trình ko bị treo.

  10. #10
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi tto_1991 Xem bài viết
    Bạn noí đ1ung rồi nó không báo lỗi nhưng sau khi client thoát hết ra thì sever cứ đứng vậy hoài phải bấm tắt chương trình thì nó mới thoát (đứng tại hàm Accept).Vậy mình giải quyết sao giờ?
    Bạn dùng thread để accept, giúp cho main thread ko bị treo. Nếu ko muốn nghe nữa, bạn đóng socket dùng để listen lại, hàm accept sẽ văng lỗi và pass qua. Bạn try catch đoạn đó lại.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

Các đề tài tương tự

  1. Socket Triệu gọi phương thức từ xa Client/Sever
    Gửi bởi MrDuy trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 04-07-2013, 10:21 AM
  2. Socket [help]: Xin ví dụ, bài về gửi - nhận dữ liệu giữa client - sever sử dụng Thread bằng Winform
    Gửi bởi float01 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 28-06-2011, 10:21 AM
  3. lỗi Cross-thread operation not valid khi dùng thread
    Gửi bởi Riku trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 13-04-2011, 02:50 PM
  4. Hỏi cách xây dựng mạng LAN theo mô hình Client-Sever
    Gửi bởi svcntt trong diễn đàn Thắc mắc chung
    Trả lời: 1
    Bài viết cuối: 06-04-2010, 09:44 PM
  5. Cách kiểm soát kết nối trên lập trình client/sever
    Gửi bởi nttt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 22-06-2007, 12:01 AM

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