掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TIdUDPServerでバッファ以上のデータを受信したとき (ID:19752)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
TIdUDPServerを使っての通信をしようとしていますが、BufferSizeを越える大きなデータ を受け取ると、それ以降のデータが受信されません(OnUDPReadイベントが発生しない) 小さなデータでも短時間に大量に送られてくると同じように反応が無くなることがあります。 下のソースで、send2で送信している間は受信側で反応がありますが、send1で大きなデー タを送ると受信側でIdUDPServer1UDPReadが呼ばれず、以降にsend2で送信しても受信側で IdUDPServer1UDPReadが呼ばれなくなってしまいます。 バッファ溢れだとは思うのですが、受信側でそれを知る方法と、状態をリセットする方法が いまいち分かりません・・。 C++Builder6を使っているのでVCLはDelphi6相当だと思います。 Indyのバージョンは8.0.25でした。 OSはwindosXPSP2です。 下のソースはC++のソースを書き換えたもので、ObjectPascalの経験が余りないので文法的 におかしな所はあるかもしれません。 【送信側】 procedure TForm1.send1(); begin IdUDPServer1->SendBuffer(Host , Port , Buffer , 10000); // 大きなデータ送信 end; procedure TForm1.send2(); begin IdUDPServer1->SendBuffer(Host , Port , Buffer , 10); // 小さなデータ送信 end; 【受信側】 procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); begin Memo1.Lines.Add('Receive Data'); // デバッグ(データ受け取った) end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.