Yêu cầu Mar 4th, 2019 1:56 a.m. 2593 1 2
  • 2593 1 2
+3

Cách kiểm tra trạng thái Online or Offline thông qua Socket trong C#

Chia sẻ
  • 2593 1 2

Em đang tìm hiểu về C# và có sử dụng TCP/Socket để xây dựng 1 ứng dụng tương tự như ứng dụng chat E đang muốn kiểm tra trạng thái ON/OFF của user nhưng thử qua các cách đều có vẻ không chính xác. Các cách em đã thử là:

  • Check socket.Connected
  • Check socket.Bloc king
  • new Ping(); sử dụng lớp Ping của c#, nhưng cái này ping theo IP , nên chỉ kiểm tra được thiết bị đó có mạng hay không. Còn trường hợp có mạng mà user đó ko online thì cũng ko check đc Em đang nghĩ tới cách nữa là sẽ gửi 1 message, nếu gửi thành công thì coi như nó online và ngược lại.

Không biết có Pro nào gặp vấn đề tương tự bên C# chưa. Em cảm ơn cả nhà 😄

2 CÂU TRẢ LỜI


Đã trả lời Mar 4th, 2019 2:45 a.m.
+3

Cái C# socket class này không có chế độ realtime. Khi gọi hàm socket.connected thì nó chỉ check 1 lần lúc chúng ta gọi. Vậy nên cách đơn giản đó là phải chạy một cái time Interval (lặp lại theo một khoảng thời gian) để gọi hàm check xem user còn connect không. C# đã có sẵn hàm socket.poll() phục vụ việc định kỳ gọi hàm cho chúng ta.

Bạn hãy tham khảo code tại đây https://stackoverflow.com/questions/2661764/how-to-check-if-a-socket-is-connected-disconnected-in-c

Chia sẻ
Avatar morikun @thanhnguyen
Mar 4th, 2019 3:17 a.m.

@chungminhtu Em cảm ơn anh 😄 Cách này trước em có thử, nhưng có vẻ không được ạ. Em làm theo cách bên dưới, không biết có bị sai không ạ.

  1. Tạo 1 dictionary lưu tất cả các socket theo user
  2. Tạo 1 Timer cho phép chạy 10s 1 lần Nhiệm vụ để update status ON|OFF
foreach(sockets) {
    if (SocketConnected(socket)) {
        updateStatus("ON");
    } else {
        updateStatus("OFF");
    }
}
bool SocketConnected(Socket s)
{
    bool part1 = s.Poll(1000, SelectMode.SelectRead);
    bool part2 = (s.Available == 0);
    if (part1 && part2)
        return false;
    else
        return true;
}

Avatar Chung Minh Tú @chungminhtu
Mar 4th, 2019 4:40 a.m.

@thanhnguyen Về cơ bản thì anh hiểu em đang xây dựng một phần mềm Chat dạng Client-Server bằng C# TCP Socket. Cách đơn giản nhất để em tham khảo đó là xem luôn code của một phần mềm chat đã hoàn chỉnh bằng C# socket nhé:

Nếu em dùng C# windows form thì đây là project mẫu cho em tham khảo: https://github.com/AdrienPoupa/chat

Nếu em dùng C# WPF thì đây là project mẫu cho em tham khảo: https://github.com/Kolahzary/SocketChat

Nếu em muốn nâng cao hơn, không chỉ chát 1-1 giữa 2 người mà muốn chát 1-nhiều (theo dạng chat phòng Room) thì có thể tham khảo các project này nhé:

https://github.com/FrankFan/MyChatRoom

https://github.com/yinyoupoet/chatRoomTest

Avatar morikun @thanhnguyen
Mar 4th, 2019 7:34 a.m.

@chungminhtu Dạ em cảm ơn anh nhiều ạ.

Đã trả lời Mar 4th, 2019 3:16 a.m.
0

Chúng tôi có thể theo dõi nếu một kết nối được thiết lập hoặc ngắt kết nối bởi mã này

console.log('a user connected'); socket.on('disconnect', function () { console.log('user disconnected'); });

C# Interview Questions

Chia sẻ
Avatar morikun @thanhnguyen
Mar 4th, 2019 3:21 a.m.

code của anh giống như socket.io trong nodejs nhỉ:D Socket trong C# hình như nó ko Emit("disconnect') khi bị mất kết nối.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí