2011-01-28 8 views
1

私はサーバーからデータを受け取り、解析しようとしています。C winsock "rolling parsing"

http://pastebin.com/1kjXnXwq http://pastebin.com/XpGSgRBh

すべてがそのまま動作しますが、私はちょうどそれのブロックをつかみ、それをプリントアウトするのではなく、データを解析します。 winsockからデータを取り込んで停止し、別の関数に渡して解析し、最後のポイントから別の\ nが現れるまで読み込みを続け、そこまでプロセスを繰り返す方法があります何も受け取りませんでしたか?

これを実行するはずの関数はmsgLoop()と呼ばれ、2番目のpastebin行にあります。

答えて

1

ソケット用の組み込み "readLine"メソッドはありません。だから、自分でそれを実装する必要がありますが、それほど難しいことではありません。私はあなたがそれを改善することができるかもしれ、グーグルでこの例を見つけました:

http://johnnie.jerrata.com/winsocktutorial/

3

ソケットから\n - 末端の文字列を読み取るには、あなたはどちらかに持っている:

から読み取る
  1. あなたが\nバイトに遭遇するまで、ソケットは一度に1バイトです。未読のバイトは、後で読むまでソケットに残されます。これはあまり効率的ではありませんが、機能します。

  2. データキャッシュを作成します。新しい文字列が必要な場合は、まずキャッシュをチェックして、すでに\nバイトが存在するかどうかを確認します。そうでない場合は、大きなブロックでソケットから読み込み、\nバイトが出現するまでキャッシュに格納してください。次に、キャッシュの内容を最初の\nバイトまで処理し、処理したバイトを削除し、残りのバイトをキャッシュの先頭に移動して後で読み込みます。