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

Đề tài: Ứng dụng LAN chat lỗi: Chỉ client cuối cùng có thể giao tiếp đc với server ?

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

    Mặc định Ứng dụng LAN chat lỗi: Chỉ client cuối cùng có thể giao tiếp đc với server ?

    Mình làm ứng dụng LAN chat này. cho phép nhiều client kết nối tới server bằng thread. Nhưng xảy ra lỗi như thế này.

    Chỉ client cuối cùng connect mới có thể gửi nhận thông điệp tới server.

    Lỗi ở đâu vậy nhỉ @-)



    lỗi này xảy ra ở 1 trường hợp client ko giao tiếp với server (thỉnh thoảng.)
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi huunam0241 : 18-09-2011 lúc 10:13 PM.

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

    Bạn có mỗi một cái Socket _MySocket; mà chạy nhiều thread thì chẳng chỉ được cái cuối.
    Bạn phải làm mỗi làn client connect đến sẽ tạo một socket mới, và truyền socket đó vào thread. chứ không dùng chung một cái như vậy được bạn ạ.
    Anh yêu em hí hí

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

    Mình thử rồi. ko phải tại cái đó đâu bạn. :(

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

    bạn gửi code bạn thử lên đây mình xem cho.
    Anh yêu em hí hí

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

    Đây bạn ơi. xem dùm mình nhé
    Attached Files Attached Files

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

    Mặc định Ứng dụng LAN chat lỗi: Chỉ client cuối cùng có thể giao tiếp đc với server ?

    Trích dẫn Nguyên bản được gửi bởi huunam0241 Xem bài viết
    Đây bạn ơi. xem dùm mình nhé
    Bạn để ý nhé,
    Của bạn là mỗi client đều tạo ra một thread để quản lý việc nghe,
    Tuy nhiên bạn có một số chỗ chưa hiểu trong mã code của bạn như sau:
    1. Bạn chỉ khai báo một StreamReader, và một streamWriter cho toàn bộ chưong trình của bạn, Cho nên mỗi khi một client mới connect với server thì lập tức cái client đó sẽ sử dụng hai biến đó của bạn
    Visual C# Code:
    1.   public void DoWork(Socket soc)
    2.         {
    3.             try
    4.             {
    5.                 _st = new NetworkStream(soc);
    6.                 _sr = new StreamReader(_st);
    7.                 _sw = new StreamWriter(_st);
    8.                 string str = _sr.ReadLine();
    9.                 txtLog.AppendText("\n Connect from: "+str);
    10.             }
    11.             catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    12.         }
    2. Bạn viết hàm gửi tin nhắn từ server đến client
    Visual C# Code:
    1.  private void btn_Enter(object sender, EventArgs e)
    2.         {
    3.             try
    4.             {
    5.                 if (txt_chat.Text != "")
    6.                 {
    7.                     if (_TCPlistener != null)
    8.                     {
    9.                         if (_ktsocket == true)
    10.                         {
    11.                             _sw.WriteLine(txt_chat.Text);
    12.                             _sw.Flush();
    13.                             txtLog.AppendText("\n Server: " + txt_chat.Text);
    14.                         }
    15.                         else
    16.                             MessageBox.Show("When you connect?");
    17.                     }
    18.                     else
    19.                         MessageBox.Show("Where server!");
    20.                 }
    21.                 else
    22.                     MessageBox.Show("Enter Messages!");
    23.             }
    24.             catch { MessageBox.Show("Error!"); }
    25.             txt_chat.Text = "";
    26.         }

    Và bạn chỉ dùng với biến _sw, mà biến này sẽ bị gán vào client mới nhất ( do vậy bạn chỉ send được tin nhắn đến client mới nhất mà thôi)

    Góp ý:
    1. Bạn cần phải hiểu rằng khi một client connect đến server thì bạn sẽ tạo ra một thread quản lý riêng hoàn toàn các biến.
    2. Khi bạn đã tạo riêng từng client ứng với mỗi thread khác nhau rồi thì khi bạn gửi tin nhắn thì bạn phải xác định là bạn gửi cho client nào. Như hàm trên của bạn thì bạn sẽ chỉ gửi đến một client cuối cùng mà thôi.

    Bạn cố gắng sửa tiếp nhé, mình sẽ hỗ trợ bạn tiếp
    Anh yêu em hí hí

  7. #7
    Ngày gia nhập
    04 2010
    Bài viết
    17

    Mình hiểu ý bạn rồi. cảm ơn nhé

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

  1. Socket Chat CLient-Server sử dụng UDPclient
    Gửi bởi taidt3 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 01-11-2013, 03:48 PM
  2. ADO.NET Giải pháp nào để cập nhật dữ liệu server cùng lúc từ nhiều client?
    Gửi bởi thienduong584 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 04-04-2012, 10:45 AM
  3. Socket Ứng dụng chat Client ko nhận dữ liệu từ server ?
    Gửi bởi huunam0241 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 16-09-2011, 03:53 PM
  4. Tài liệu về chat giữa server và client sử dụng C++. cho mình xin...cảm ơn rất nhiều.
    Gửi bởi longkungfu trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 5
    Bài viết cuối: 07-11-2010, 11:19 AM
  5. lập trình socket chat giữa client và server
    Gửi bởi thanhit89 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 03-04-2009, 06:37 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