※ ChatGPTを利用し、要約された質問です(原文:C# ソケット通信でデータ受信時の欠損について)
C# ソケット通信でデータ受信時の欠損について
このQ&Aのポイント
C#のSocket Classを使用してデータの送受信をするプログラムを作成していますが、非同期でデータを受信する際にデータの欠損が起きてしまう問題に悩んでいます。
現在の方法では、socket.BeginReceiveで受信開始し、受信時のコールバック関数の中でデータとサイズを取得し、再度socket.BeginReceiveで受信を続けていますが、この方法だとデータの一部が取りこぼされる可能性があります。
非同期でデータを受信する際に欠損なく受信する方法を知りたいです。別の方法などがあれば教えていただけると助かります。
Visualstudio 2013 を使用して C# で開発を行っています。
Socket Classを使用してデータの送受信をするプログラムを作成しているのですが、
非同期でデータを受信する際に取りこぼしなくデータを受信させる方法で悩んでいます。
現在行っているのは、
socket.BeginReceiveでデータ受信時のコールバック関数を登録し受信開始。
データ受信時のコールバック関数の中で
len = socket.EndReceive(ar);
byte[] rcvBuff = (byte[])ar.AsyncState;
でデータとサイズを取得
再度socket.BeginReceiveで受信開始。
としています。
悩んでいるのは EndReceive から、二回目のBeginReceiveまでの間に送られたデータを取りこぼしてしまうのではないかということです。
認識として間違っていたら指摘頂きたいです。
また、別の方法で非同期で取りこぼしなく受信できるやり方が有りましたらヒントでもよいので教えていただけたらと思います。
よろしくお願いします。
お礼
ありがとうございます。 そのままでよさそうですね。 わかりやすいたとえで理解出来ました。