NetworkStream でOverflowExceptionが発生する

タイトルの通りなのですが、NetworkStreamを使用してデータのやり取りをしているときにOverflowExceptionが発生することが多かったのでその解決策をまとめておきます。

前提条件

  • データを送る際に Packetクラスを使用してラッパしている
  • PacketWriter を使用して読み書きを行う

 

発生原因

完璧に調べているわけではないですが、

Packetクラスでラップしているため実際のデータより少しデータが多くなることと、

読み書きの速さがとてつもなく早いことが原因だと判明しました。

解決方法

ずばりもっとも簡単な解決方法は帯域を制限することです。

具体的には Packetをラップして送るたびに カウンタの値を1増やし、

カウンタの値がXで割れるときに待機処理させるだけです。

int count = 0;

while(条件) {
  // データの送信処理
  count++;
  if (count % 10 == 0) {
    // 10回毎に 1ms 待機する
    Thread.Sleep(1);
  }
}

 

投稿者:

kema

趣味でプログラミングしてるだけの人

コメントを残す

%d人のブロガーが「いいね」をつけました。