7

TTCPBlockSocketTCP/IPアプリケーションに使用しています。問題は、接続がいつ失われたかを判断できないことです。

GetLastError
Read0を返します0を返します

しかし、アプリケーションが接続されている場合、これらの値に遭遇するので、TCP/IP接続が失われたときに通知する方法を取得できます。

ありがとう

4

3 に答える 3

1

つまり、パラメータCanReadに0を渡して、このメソッドを使用できTimeoutます。この関数は内部selectでソケットの関数を実行し、エラーが発生するとFalseを返します。接続が失われるとselect関数が返され、結果としてメソッドがFalseを返すため、このメソッドだけを使用するだけで十分です。したがって、この方法でソケット接続が有効かどうかを確認するだけで十分だと思います。SOCKET_ERRORCanRead

function IsSocketAlive(ASocket: TTCPBlockSocket): Boolean;
begin
  Result := ASocket.CanRead(0);
end;
于 2012-10-24T11:51:47.150 に答える
1

opC0de が言うように、クライアントがまだ接続されているかどうかを確認するには、TCPBlockSocket.CanRead(0) と TCPBlockSocket.WaitingData = 0 の両方を確認する必要があります

function IsSocketAlive(ASocket: TTCPBlockSocket): Boolean;
begin
  Result := (ASocket.Socket = INVALID_SOCKET) or ((ASocket.WaitingData = 0) and ASocket.CanRead(0));
end;

私は自分のプロジェクトでこの方法を使用しているので、それが機能することを確認できます。

于 2014-08-20T22:41:30.987 に答える