
WinsockでUDP通信を行うプログラムを作っているのですが、
原因不明の問題が発生していて困っています。
通信手順は以下のとおりです。
(1) クライアントからサーバへ要求パケット送信
(2) 要求パケットを受け取ったサーバは、クライアントへACKを送信
(3) サーバが要求に対する応答パケットをクライアントへ送信
(4) 応答パケットを受け取ったクライアントは、サーバへACKを送信
クライアント-サーバ間でやりとりするデータは最大で992バイト、
それ以上になる場合は、分割して送信します。
パケットの分割が発生しない場合は、(1)~(3)がパケットの損失もなく通信できるのですが、
パケットの分割が発生する場合には、2回目以降の(4)のパケットがクライアントに届きません。再現率は今のところ100%です。
クライアント側のselect関数でもソケットを検出しません。
たしかにUDPは信頼性が低いですが、パケット分割が発生しないパターンでは100%届くので、UDPの仕様とは関係ないような気がします。
原因がさっぱりわからないので、アドバイスをお願いいたします。
ちなみに、クライアント、サーバともに同一端末内にあります(双方がループバックアドレスに対してパケットを送信)が、
これはテスト段階だからであって、本来はそれぞれ別々の端末で動作します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
おつかれさまです。
自分では、UDPは、
1.受信順位が送信順位通りにはならない場合がある。
2.送信した全てのデータが受信できるとは限らない。
だめなデータも受信してしまうので、それらの
データは読み飛ばすしかない。
3.つまり、まともなハンドシェイクはできない。
程度で、通信の品質は「ラジオ放送よりひどい」と考えています。
たとえ実験用のネットワークで動いても、お外でちゃんと動いて
くれるか心配でなりません。つまり、それでも良い、極端に言うと
「一度も送受信に成功しなくても問題ない」ような厳密度の低い
情報の送信にしか使えないなぁと考えています。
また、この欠点を補うためにハンドシェイクをコードしていくと、
結局TCP/IPになってしまいます。それなら最初からTCP/IPを
使った方がはるかに簡単で確実です。
TCP/IPなら、ACKやパケット等のことは全て無視してコードでき、
より通信仕様の精度に注力できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 固定IP スマホやPCのIPアドレスについて教えてください。 5 2023/07/07 19:53
- PHP PHP でメールフォームを作成したい 1 2022/05/04 22:28
- docomo(ドコモ) ドコモの114サービスで、パケット通信中となるのは 電話の時以外もありますか? 先日主人の携帯を調べ 2 2022/12/08 11:28
- 格安スマホ・SIMフリースマホ 日本通信Simで通信量を使い切り、低速制限を受けていますが、この間にパケット使用量は発生しますか? 4 2023/07/07 16:18
- メルカリ らくらくメルカリ便 スマホを送った 箱が3 cm 以上ありました ゆうパケットではだめ? 1 2023/02/08 23:32
- ノートパソコン ESETの初期インストールの仕方 1 2022/10/14 08:26
- 格安スマホ・SIMフリースマホ 【楽天モバイル】楽天モバイルはパケット通信料が減らない低速モードに切り替えられる公式 3 2022/12/21 07:48
- 格安スマホ・SIMフリースマホ おすすめのesimを教えてください 2 2023/07/18 15:39
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- その他(応用科学) パケット交換方式 1 2022/07/09 12:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報