עבור לתוכן

בדיקה האם socket מחובר

Featured Replies

פורסם

היי , מחיפושים ברשת מצאתי מימוש של isconnected בשביל sockets

!(client.Client.Poll(1, SelectMode.SelectRead) && client.Client.Available == 0);

[pre]

לא כזה ברור לי איך זה עובד, האם זמן של 1 מילי שנייה מספיק כדי לקבל תגובה, וגם poll מחזיר true גם אם יש מידע אפשרי לקריאה

כלומר isconnected יחזיר false.

תודה

[/pre]

פורסם

על מה אתה מדבר? באיזו שפה אתה כותב? מה זה client? אתה מצפה שננחש?

פורסם
  • מחבר

צודק, מצטער , אני מדבר על c#

הפונקצייה המלאה

public static bool IsConnected(this TcpClient client)
{
try
{
bool connected = !(client.Client.Poll(1, SelectMode.SelectRead) && client.Client.Available == 0);

return connected;
}
catch
{
return false;
}
}

לא ברור לי כ"כ איך זה עובד , והאם זמן של 1 מיקרו שנייה מספיק בשביל polling

פורסם


public static bool IsConnected(TcpClient client)
{
return client.Client.Connected;
}

יש לי הרגשה שזה לא התשובה שחיפשת. בכל מקרה תגיד אם זה עזר

פורסם
  • מחבר

זה לא כ"כ עוזר כי socket.connected מחזיר את מצב החיבור לפי הפעולה האחרונה שבוצעה ולא לפי המצב העדכני.

אבל תודה בכל מקרה

פורסם

אני חושב ש POLL יחזיר לך FALSE גם במידה וה SOCKET עדיין מחובר, אבל אין שום נתונים חדשים לקרוא (הצד השני לא שלח שום דבר), אז זה לא ממש מציין אם הוא מחובר.

מה שכן, אם תעשה TIMEOUT של 10 שניות למשל, והצד השני יתנק בזמן הזה, אז POLL יחזיר TRUE, ו AVIALABLE יהיה 0, זה אינדיקציה לניתוק שהתרחש.

הדרך הכי בטוחה לדעת אם אחד הצדדים מחובר, היא לעשות PING.

פורסם


public bool Poll(int microseconds, SelectMode mode);


Checks the status of a Socket. The first argument specifies the number of microseconds to wait for a response. A negative value indicates blocking indefinitely.

The status checked depends on the SelectMode enumeration argument. SelectMode.SelectRead checks for readability. SelectMode.SelectWrite checks for writeability. SelectMode.SelectError checks for the existence of an error

ויתר ביטחון שאל על שלושת סוגי הMODE כדי להיות בטוח שהוא בחובר.

מקווה שעזרתי!

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים