トップページ > 過去ログ > 記事閲覧
データの受信について
名前:M 日時: 2008/02/02 21:25

ご質問されていただきます。 現在ネットワークプログラムを作成しているのですが、 サーバーに同時、もしくは受信処理が完了し、バッファから データが削除されるまでに、 複数のデータが送られてきた場合、 その複数のデータがつながって受信されてしまいます。 *例 送信されたデータ ・データ1 ・データ2 ・データ3 受信シタデータ データ1データ2データ3 これをうまく分割する方法、もしくは 一つ一つ受信する方法はないでしょうか?

Page: 1 |

Re: データの受信について ( No.1 )
名前:ライブラリ使用者 日時:2008/02/02 22:16

「通信データ型」でここの掲示板の検索してみてください。
Re: データの受信について ( No.2 )
名前:M 日時:2008/02/02 23:49

ご返答ありがとうございます。 指摘されたスレッドはすでに確認ずみなのですが 私が行いたいのは複数のタイプのデータを送信、ではなく、 送信されてきたデータを受信し、バッファから削除する前に 新たなデータが送信され、つながってしまっている状態から うまく分割、もしくは一つ一つ受信にしたいです。 *例 ・クライアントがチャットを送信と同時に移動した場合 クライアント >送信> "[マップ移動情報]" クライアント >送信> "[チャット情報]" サーバーが[マップ移動情報]を受信し、 バッファから削除する前に[チャット情報]が送信された。 サーバー <受信< "[マップ移動情報][チャット情報]" と受信されてしまいます。
Re: データの受信について ( No.3 )
名前:ライブラリ使用者 日時:2008/02/03 00:08

「通信データ型」のNo10からお読みください。 (No10で自分も同じ嵌り方をした質問をしています。 ってそうなることが仕様という事はご存知と。。。 なら一例としては同No11に管理人さまがサンプルソースを記載しています。 または「通信待ち」を確認してみてください。 上記にいくつかサンプルが載っていますが、考え方は同じです。 ・データ1、2、3それぞれのデータサイズをまず受信側が知る必要があります。(データ内にサイズも含めることで解決する ・NetWorkRecvで指定サイズのデータのみ受信する ・指定サイズ分、全受信データをシークさせる これを繰り返すです。 もうちょい具体的に 送信 Send1[10] Send2[10] Send3[10] 受信 Recv[30] Recv[0]から10バイト分を取得する→データ1 Recv[10]から10バイト分を取得する→データ2 Recv[20]から10バイト分を取得する→データ3 です
Re: データの受信について ( No.4 )
名前:M 日時:2008/02/03 01:11

迅速なご返答感謝します。 ただ今回は送信されるデータ数が未知数、データサイズも未知数ということを記入しわすれました。。。 申し訳ないです。。 ライブラリ使用者さんの考えを元にしてなんとか解決できました! とりあえずデータに区切りをつけ、受信側で個数とそれぞれの内容を区切りで取り出し、 その個数分だけそれぞれの内容をFOR文でケース分けしていく、 という形にまとまりました。 もっと効率的な方法があればいいのですが、 現在の私の思考ですとこれが精一杯です。。 ここでつまっていたので感謝します。ありがとうございました。
Re: データの受信について ( No.5 )
名前:ライブラリ使用者 日時:2008/02/03 15:54

一応。 >データ数が未知数、データサイズも未知数 データ数は問題ないかと思いますが、データサイズは問題ありな気がしますよ。 >データに区切りをつけ これは例えば、0をX個連続させるなどで区別するということだと思うのですが、データが未知数である場合、もしその区切りと同じデータが含まれた時に誤作動の元となります。

Page: 1 |