2011-05-27 33 views
4

我剛剛開始熟悉Eclipse,Emacs,Visual Studio和記事本生活後的Embarcadero RAD Studio 2010:爲什麼不建議使用TClientSocket和TServerSocket,而應該使用什麼?

我跳進了一個相當大的C++應用程序(500.000 - 1.000.000線),我發現大量使用TClientSocket和TServerSocket。 IDE首先強調TClientSocket沒有找到,但仍然可以編譯,我抓住了我的頭。然後我發現它不再是默認安裝的,並且自回來以後被標記爲已棄用。

我試過了解這個主題,但沒有找到太多的信息。我的問題是

  • 爲什麼不建議使用TClientSocket和TServerSocket?
  • 它們與WinSock和BSD套接字的功能有什麼不同?
  • 什麼是最好使用,而不是有一個快速替換,不會涉及通過整個應用程序和改變無處不在TClientSocket和TServerSocket正在使用?我猜想這主要是內部工作變化或?

回答

3

已棄用,因爲不再支持。它們是Winsock套接字的包裝,所以整體內部機制是相同的 - '創建監聽器,監聽,接受,創建客戶端處理程序線程,將其傳遞給ServerClientSocket,客戶端線程讀取和寫入數據流'。

你也許可以嘗試導入組件 - 如果你有一個龐大的遺留應用程序支持,那麼這肯定是如果它的工作方式。

然後還有其他的方式:((使用印或突觸組件來構建「Tclientsocket構件實現」和TServerSocket」類具有相同的成員,使傳統的應用程序將沒有巨大變化工作

+0

是的,我已經安裝了並導入組件,以便應用程序編譯並運行良好。但根據棄用的原因,可能並且想法使用indy或synapse創建包裝類 – inquam 2011-05-27 08:31:47

0

他們贊成被否決。 Indy套接字

但是,Indy套接字是僅阻塞的,如果你的程序使用了阻塞套接字,那麼這很好,但是如果你使用的是非阻塞套接字,那麼據我所知你只有兩個選項:

  • 使用線程加阻斷印插座
  • 使用Tclientsocket構件實現和TServerSocket

有部件TTcpServerTTcpClient具有阻塞和非阻塞之間進行切換。但是,如果以非阻塞模式操作它們,則它們不起作用(基本操作會因WSAEWOULDBLOCK而失敗),並且沒有解決方法。

請注意,讀者可能沒有意識到:即使在最新版本中(我寫的),仍然可以通過將dclsocketsNNN.bpl添加到設計時軟件包列表中,將它們導入到IDE中。他們在那裏,只是默認情況下不活躍。

個人而言,我仍然在生產中使用Tclientsocket構件實現非阻塞模式,只是正常工作(修復了一些bug,這可能是由於到完整的源代碼提供事後!)

+0

您是否有這些「修復」可用?可能解決我們有時看到的一些舊奇怪的錯誤:) – inquam 2014-06-11 10:01:55

相關問題