我正在尋找面向物件的方式來使用正在進行中的套接字,并找到了以下檔案: https ://documentation.progress.com/output/oehttpclient/117/index.html?OpenEdge.Net.ServerConnection.ClientSocket.html
我還為該類找到了以下源代碼: https ://github.com/consultingwerk/ADE-Sourcecode/blob/master/src/netlib/OpenEdge/Net/ServerConnection/ClientSocket.cls
似乎不存在任何關于它的資訊或教程。
我試圖通過查看源代碼來繪制它的用法并想出了這個:
USING OpenEdge.Net.ServerConnection.ClientSocket.
USING OpenEdge.Net.URI.
USING OpenEdge.Net.ServerConnection.ClientSocketConnectionParameters.
CLASS SocketTest:
CONSTRUCTOR PUBLIC SocketTest():
DEF VAR clientSocket AS ClientSocket NO-UNDO.
DEF VAR data AS LONGCHAR NO-UNDO.
DEF VAR memptr AS MEMPTR NO-UNDO.
/* Create the socket object */
clientSocket = NEW ClientSocket(
NEW ClientSocketConnectionParameters(
new URI("scheme???", "192.162.1.50", "9100")
)
).
/* Subscribe to 'DataReceived'-event??? */
clientSocket:DataReceived:Subscribe(THIS-OBJECT, OnDataReceived).
/* Connect */
clientSocket:Connect().
/* Send data */
data = "Hello world!".
COPY-LOB FROM data TO memptr.
clientSocket:WriteData(memptr).
/* Wait for response */
clientSocket:WaitForResponse().
)
METHOD PUBLIC OnDataReceived(poSender AS ClientSocket, poEventArgs AS SocketReadEventArgs):
DEF VAR longcharData AS LONGCHAR NO-UNDO.
/* Convert the received data to longchar */
COPY-LOB FROM poEventArgs:Data TO longcharData.
END.
END.
我不確定上面的代碼是否真的可以接收任何資料,或者是否ClientSocket需要一些額外的配置?使用同一段代碼發送和接收資料會很棒。
我也想知道,我們是否可以將其從“客戶端”更改為“服務器”,這意味著客戶端將是第一個連接到我們的客戶端,然后我們將開始向該客戶端發送訊息等?
uj5u.com熱心網友回復:
ClientSocket 類是作為 HttpClient 實作的一部分撰寫的,正如您所注意到的,它并沒有真正記錄為獨立的東西。也就是說,你有正確的方法。完成后我會添加一個Unsubscribe- AVM 為訂閱保留“交叉參考”,因此 GC 不會清理 SocketTest 或 ClientSocket 實體。
關于事件處理程式的注釋:事件引數包含在DataMEMPTR 中讀取的位元組數 - (默認情況下)大小為 8k。在這個例子中,這可能無關緊要,因為COPY-LOB陳述句將讀取資料,直到它到達第一個空位元組,并且應該停在那里。您可以在https://github.com/consultingwerk/ADE-Sourcecode/blob/41f3bf2e90cea6537a4717a6b277a9cfcd8dd36e/src/netlib/OpenEdge/Net/HTTP/Lib/ABLSockets/ABLSocketLibrary.cls#L178中看到一個示例。
ClientSocketConnectionParameters 類包含有關套接字的資訊——主機、埠、SSL 選項、超時等。ClientSocket 將在其Connect()方法中使用該資訊。有一個覆寫可讓您傳入 ClientSocketConnectionParameters 物件,以便您可以重用 ClientSocket 物件。
DataReceived、ReadTimeout 和 ReadTerminated 事件是您使用從連接的服務器回傳的資料或對其他事件的回應的方式。
但是,ClientSocket 并不打算用作服務器套接字。您必須撰寫自己的實作。AFAIK(從 OpenEdge 12.6 開始)沒有作為 OE 產品的一部分提供。
根據您的 OE 版本,您可以在https://documentation.progress.com/output/oehttpclient/獲取更新的 API 檔案- 這會將您重定向到最新版本,并且該頁面應該包含指向先前 OE 版本的鏈接。
新 ClientSocketConnectionParameters(新 URI(“方案???”,“192.162.1.50”,“9100”))
這里的方案通常是“http”或“https”。它主要用于定義默認埠值(http 為 80,https 為 443)。如果您為 URI 提供埠,則方案只是一個字串。
URI 類通常用于表示每個http://tools.ietf.org/html/rfc3986的 URI
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520783.html
標籤:插座打开进步-4gl
