2009-06-18 3 views
0
SOCKET client = accept(listen_sock, 0, 0); 

timeval client_to; 
client_to.tv_sec = 1; 
client_to.tv_usec = 0; 
setsockopt(client, SOL_SOCKET, SO_RCVTIMEO, (char*)&client_to, sizeof(client_to)); 
char buffer[1024]; 
while ((ret = recv(client, buffer, 1024, 0)) != 0) 
{ 
    cout << "<in loop>" << endl; 
    if (ret == -1 && WSAGetLastError() != WSAETIMEDOUT) break; 
    if (ret > 0) cout << std::string(buffer, 0, ret) << endl; 
} 

closesocket(client); 

上記のコードは、C++で書かれた単純なエコーサーバの一部です。 私が直面している問題は...シンプルなC++エコーサーバをCに移植したいのです

  1. タイムアウト値の設定とタイムアウト時間の検出方法は期限切れですか?
  2. ソケットの切断を検出するにはどうすればよいですか?

C#でコードを表示させてください。ありがとう。

が続くされ、私のC#コードの

パート>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>追加しました.. 。

try 
{ 
    // Read all 
    spider.Client.ReceiveTimeout = 500; // spider is TcpClient type and blocking socket. 
    int readCount = 0; 
    SocketError socketError; 
    while ((readCount = spider.Client.Receive(tempBuffer, 0, tempBuffer.Length, SocketFlags.None, out socketError)) > 0) // I think time-out does not work, Receive() returns immediately. 
    { 
    recvBuffer.Append(tempBuffer, 0, readCount); 
    } 
} 
catch (Exception e) // even though spider is disconnect, no exception occurred. how can I detect disconnection? 
{ 
    Console.WriteLine("Exception: {0}", e.Message); 

} 
+0

あなたの質問は「これを書いてください」よりも「私のためにこれを書いてください」ということですか? :)実際のC#関連の問題に直面したときに試してみることをお勧めします。 .NETはクラスであり、関数とハンドルではないことを除けば、他のソケットと非常によく似たSocketクラスを持っています。 – Skurmedel

+0

私の記事は誠実ではないようですか?私は何度もC#を使ってテストしており、正しい方法を見つけることができませんでした。私は何もしないで尋ねるだけではありません。私はC#のソケットが似ていることを知っています(私は本当に願っています)が、期待通りに動作させるのは簡単ではありません。とにかくありがとう。 –

+0

問題はありませんが、現在のC#コードを投稿して作業することができますか? 2つの異なる質問があるようにみえるので、2つの異なる質問でそれらを分割するほうがよいかもしれないので、誰もが簡単になります。 – Skurmedel

答えて

0

.NET用kodartによってXF.Serverソケットライブラリをチェックしてください。ライブラリをダウンロードすると、Xf.Serverライブラリの実装例としてエコーサーバが付属しています。これはあなたのために働くでしょう。

www.kodart.com

ありがとうございます。

関連する問題