サービス中のtcp接続に関する問題

キャスパー

特定のクライアントからデータを受信するサービスを作成しました。これは正常に機能し、必要なデータのほとんどを受信できません。ただし、接続の2〜4時間後に、StreamReader.ReadLineでこのエラーが発生します。このエラーが発生した後、サービスはCPUの90〜99%を使用し始め、cmdとTaskkillを使用してのみ閉じることができます。

System.IO.IOException:トランスポート接続からデータを読み取れません:既存の接続がリモートホストによって強制的に閉じられました。---> System.Net.Sockets.SocketException:既存の接続がSystem.Net.Sockets.Socket.Receive(Byte [] buffer、Int32 offset、Int32 size、SocketFlags socketFlags)のリモートホストによって強制的に閉じられました。 Net.Sockets.NetworkStream.Read(Byte [] buffer、Int32 offset、Int32 size)---内部例外スタックトレースの終わり--- System.Net.Sockets.NetworkStream.Read(Byte [] buffer、Int32 offset、 Int32サイズ)at System.IO.StreamReader.ReadBuffer()at System.IO.StreamReader.ReadLine()

接続のコード:

    static readonly object _lock = new object();
    List<Task> _connections = new List<Task>();
    private static string strConn;
    private static int _port;

    public async Task connectClients()
    {
        TcpListener ServerSocket = new TcpListener(IPAddress.Any, _port);
        ServerSocket.Start();

        while (true)
        {
            TcpClient client = await ServerSocket.AcceptTcpClientAsync();
            var task = handle_clients(client);

            if (task.IsFaulted)
                task.Wait();

        }
    }

 private async Task handle_clients(TcpClient client)
    {
        var connectionTask = HandleConnectionAsync(client);

        lock (_lock)
            _connections.Add(connectionTask);

        try
        {
            await connectionTask;
        }
        catch (Exception ex)
        {
            new LogWriter(ex.ToString());
        }
        finally
        {
            // remove pending task
            lock (_lock)
            {
                _connections.Remove(connectionTask);
                client.GetStream().Close();
                client.Close();
            }

        }
    }  
    private async Task HandleConnectionAsync(TcpClient client)
    {
        await Task.Yield();
        NetworkStream stream = client.GetStream();
        StreamReader reader = new StreamReader(stream);
        while (true)
        {
            try
            {                    
                string data = reader.ReadLine();
                if (!string.IsNullOrWhiteSpace(data))
                {
                    Thread t = new Thread(() => DatabaseFix(data));
                    t.Start();
                }
            }
            catch (Exception ex)
            {
                new LogWriter(ex.ToString());
                break;
            }


        }

    }

では、何らかの理由で接続が閉じられたときに何が起こると予想しますか?接続をシャットダウンしてから、新しい接続を取得する必要がありますか?

これは、クライアントとサービス間のインターネットエラー「ファイアウォール」である可能性がありますか?この場合、エラーは何でしょうか?

キャスパー

興味のある人のために。問題は、クライアントが接続を送信し続け、送信するデータが得られるまで接続を再び閉じることでした。クライアント接続でエラーが発生したときに、コードがネットワークストリームをシャットダウンしませんでした。

HandleConnectionAsyncをこれに変更しました。

 try
        {
            using (var stream = client.GetStream())
            using (var reader = new StreamReader(stream))
            {
                while (true)
                {
                    var data = await reader.ReadLineAsync();
                    if (string.IsNullOrEmpty(data))
                    {
                        break;
                    }
                    DatabaseFix(data);

                }
            }
        }
        catch (Exception ex)
        {
            new LogWriter(ex.ToString());
        }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Flutter AppAPIサーバーの接続に関する問題

分類Dev

Xamarin.FormsをWebサービスに接続する際の問題

分類Dev

ステートレスセットに接続されたヘッドレスサービスのポートに関する問題

分類Dev

AndroidのBLEデバイスに自動的に接続するサービスの作成に関する質問

分類Dev

AWSECSでのサービスの設定に関する問題

分類Dev

RESTfulサービスでのTimeStampの精度に関する問題

分類Dev

https経由でWCFサービスに接続するXamarinアプリの問題

分類Dev

Wordpressのデータベースへの接続に関する問題

分類Dev

Oracleデータベースへの接続に関するJUnitの問題

分類Dev

DockerComposeのデータベースへの接続に関する問題

分類Dev

TCP経由でDBusサービスに接続する

分類Dev

ADBサービスに関するAndroidStudio(3.1.2)の問題

分類Dev

サービスの命名規則に関する問題

分類Dev

Azurekubernetesサービスの作成に関する問題

分類Dev

Azurekubernetesサービスの作成に関する問題

分類Dev

Laravel5のデータベース接続に関する問題

分類Dev

firebirdと.ibデータベース(Interbase)の接続に関する問題

分類Dev

ローカルホストでのMYSQLへの接続に関する問題

分類Dev

URL接続に関するURLエンコードの問題

分類Dev

Elasticsearchの問題:AWSelasticsearchサービスに接続できません

分類Dev

サービスへの接続の問題

分類Dev

Android AsyncTaskの問題(Webサービスへの接続)

分類Dev

Windowsサービスのインストールに関する問題

分類Dev

CloudSQLに接続するDAGのロードに関するCloudComposerの問題

分類Dev

DiscordPythonスクリプト-接続されたサーバーでの毎日の投稿のスケジュールに関する問題

分類Dev

Oracle SIDおよびサービス名。接続の問題

分類Dev

クライアントソケットとサーバーソケットの接続に関する問題

分類Dev

初期設定とVisualStudioからMicrosoftSQLサーバーへの接続に関する問題

分類Dev

バレリーナサービスの実行に関する問題

Related 関連記事

  1. 1

    Flutter AppAPIサーバーの接続に関する問題

  2. 2

    Xamarin.FormsをWebサービスに接続する際の問題

  3. 3

    ステートレスセットに接続されたヘッドレスサービスのポートに関する問題

  4. 4

    AndroidのBLEデバイスに自動的に接続するサービスの作成に関する質問

  5. 5

    AWSECSでのサービスの設定に関する問題

  6. 6

    RESTfulサービスでのTimeStampの精度に関する問題

  7. 7

    https経由でWCFサービスに接続するXamarinアプリの問題

  8. 8

    Wordpressのデータベースへの接続に関する問題

  9. 9

    Oracleデータベースへの接続に関するJUnitの問題

  10. 10

    DockerComposeのデータベースへの接続に関する問題

  11. 11

    TCP経由でDBusサービスに接続する

  12. 12

    ADBサービスに関するAndroidStudio(3.1.2)の問題

  13. 13

    サービスの命名規則に関する問題

  14. 14

    Azurekubernetesサービスの作成に関する問題

  15. 15

    Azurekubernetesサービスの作成に関する問題

  16. 16

    Laravel5のデータベース接続に関する問題

  17. 17

    firebirdと.ibデータベース(Interbase)の接続に関する問題

  18. 18

    ローカルホストでのMYSQLへの接続に関する問題

  19. 19

    URL接続に関するURLエンコードの問題

  20. 20

    Elasticsearchの問題:AWSelasticsearchサービスに接続できません

  21. 21

    サービスへの接続の問題

  22. 22

    Android AsyncTaskの問題(Webサービスへの接続)

  23. 23

    Windowsサービスのインストールに関する問題

  24. 24

    CloudSQLに接続するDAGのロードに関するCloudComposerの問題

  25. 25

    DiscordPythonスクリプト-接続されたサーバーでの毎日の投稿のスケジュールに関する問題

  26. 26

    Oracle SIDおよびサービス名。接続の問題

  27. 27

    クライアントソケットとサーバーソケットの接続に関する問題

  28. 28

    初期設定とVisualStudioからMicrosoftSQLサーバーへの接続に関する問題

  29. 29

    バレリーナサービスの実行に関する問題

ホットタグ

アーカイブ