tserversocket判斷用戶端狀態

來源:互聯網
上載者:User

淺談socket編程心得 做了好一陣的socket通訊,覺得網路通訊這東西真是不怎麼好弄,感覺很多都不在自己的控制當中。尤其對於 即時系統來說,如何保證不丟一條資料,如何管理每個用戶端的串連真是不那麼簡單。我為此苦惱困惑了很久, 可以說現在我還是有很多不解的地方。我只說說我遇到的一些問題和解決方案。希望可以協助到有需要的人。

  我用的是delphi的tserversocket和tclientserver進行的資料轉送編程。編程過程中遇到的問題:

1、 伺服器怎麼判斷用戶端的狀態,好釋放相應的變數,記憶體。

  這個問題直到現在我還是不能及時判斷出。當用戶端正常關閉時。我可以知道,但是當用戶端網路斷了的話。我就無法判斷出。我採用大多數人用到的”心跳“方法。就是每隔幾秒種向用戶端發送一個確認資訊。

i:=tserversocket.socket.sendtext('ddd');

如果i<0就認為用戶端斷開了。關閉相應的socket。tserversocket有一個屬性很有用。connected。在正常情況下可以協助我們知道用戶端是否串連。在加上心跳就可 以全部判斷處理了。部分代碼。

     if session[i].Csocket.Connected =true then    

 //主要是用戶端不正常斷開的時候用到
       ret:=session[i].Csocket.SendText('衛星即時系統檢測用戶端串連情況') 
     else
     begin
        if assigned(Fclientclose) then
        OnWellDisConnect(Self,session[i].Cwell);

     end;
  end;

  if ret<0 then
  raise Emiss.create('網路出錯');
  end;


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.