約30台の車のモデムからメッセージをリッスンするアプリケーションがあります。TcpListenerを使用して、次のようなサーバーコードを実装しました(エラー処理は省略されています)。
...
listener.Start()
...
void
BeginAcceptTcpClient()
{
if(listener.Server.IsBound) {
listener.BeginAcceptTcpClient(TcpClientAccepted, null);
}
}
void
TcpClientAccepted(IAsyncResult ar)
{
var buffer = new byte[bufferSize];
BeginAcceptTcpClient();
using(var client = EndAcceptTcpClient(ar)) {
using(var stream = client.GetStream()) {
var count = 0;
while((count = stream.Read(buffer, total, bufferSize - total)) > 0) {
total += count;
}
}
DoSomething(buffer)
}
私はメッセージを正しく受け取ります、私の問題は切断にあります。12時間ごとにモデムはリセットされ、新しいIPアドレスを取得しますが、サーバーは引き続き古い接続をアクティブに保ちます(tcpviewでESTABLISHEDとしてマークされます)。古い接続のタイムアウトを設定する方法はありますか?TcpClientを閉じることでTCP接続が閉じられたと思いました(そしてそれが私のローカルテストで起こります)、私が間違っていることは何ですか?