QA@IT
«質問へ戻る

質問を投稿

ストリーム型ソケットにおけるデータ(メッセージ)の受信について

初めまして

ストリーム型のソケットプログラミングにおいて、送受信するアプリケーションデータの
取り扱いについて、ご教示いただきたいことがございます。

ストリーム型ソケットを使用する場合、各データは区切りなく送受信されるため、
データにヘッダーを設け、そのデータ長を記載して送受信するかと思います。
(データの最後に区切りコードを付ける方法もありますが、データ長を記載する方法で考えています。)

送信側で、送信するデータのデータ長(Length)が正しく設定されていれば
問題はないかと思いますが、送信側で誤って、実際に送信するデータサイズと異なる
データ長(Length)を設定した場合に、受信側でどのように扱えばよいか苦慮しています。

実際に送信するデータサイズより小さな値が設定された場合は、
次のデータのヘッダー部分を正しく受信することができませんし、
また、大きな値が設定された場合は、次のデータのヘッダー部分まで
受信してしまい、いずれにしても次のデータを適切に送受信できなくなってしまいます。

一般的に、ヘッダーに設定されているデータ長(Length)が正しく設定されていない
データを受信した場合、次のデータを適切に扱うため、どのように判断すればよいのか
お知恵を拝借いたしたくご質問させていただきました。

よろしくお願いいたします。

初めまして

ストリーム型のソケットプログラミングにおいて、送受信するアプリケーションデータの
取り扱いについて、ご教示いただきたいことがございます。

ストリーム型ソケットを使用する場合、各データは区切りなく送受信されるため、
データにヘッダーを設け、そのデータ長を記載して送受信するかと思います。
(データの最後に区切りコードを付ける方法もありますが、データ長を記載する方法で考えています。)

送信側で、送信するデータのデータ長(Length)が正しく設定されていれば
問題はないかと思いますが、送信側で誤って、実際に送信するデータサイズと異なる
データ長(Length)を設定した場合に、受信側でどのように扱えばよいか苦慮しています。

実際に送信するデータサイズより小さな値が設定された場合は、
次のデータのヘッダー部分を正しく受信することができませんし、
また、大きな値が設定された場合は、次のデータのヘッダー部分まで
受信してしまい、いずれにしても次のデータを適切に送受信できなくなってしまいます。

一般的に、ヘッダーに設定されているデータ長(Length)が正しく設定されていない
データを受信した場合、次のデータを適切に扱うため、どのように判断すればよいのか
お知恵を拝借いたしたくご質問させていただきました。

よろしくお願いいたします。