編集!バッファがいっぱいになるまで読み取りがブロックされることを読んでください。毎回1MB(私の最大バッファ長)を送信しなくても、一体どうやって小さなパケットを受信できますか?任意の長さのメッセージを送信したい場合はどうなりますか?
Javaでは、char配列を心配することなく送信できるようです。socket.read(...)
しかし、ブーストソケットを備えたC ++では、すべてが揃ったと思うまで呼び出しを続けるか、無駄に思えるデータのバッファ長全体を送信する必要があるようです。
コンテキストに関する古い元の質問。
さらに、ブーストソケットは私を完全に困惑させました。ガイダンスとしてブーストSSLの例を使用
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> socket;
しましたが、非同期呼び出しではなく、それにスレッドを割り当てました。最初
socket.read_some(...)
のソケットは問題なく、すべてのバイトを読み取ります。その後、1バイトを読み取り、残りはすべて次のバイトを読み取りますが、socket.read_some(...)
これは私を本当に混乱させました。次に、read_someには通常この動作があることに気付きました。それでboost::asio::read
、ソケットにはメンバー関数の読み取りがあるので、私は移動しました。これは私を驚かせました。ただし、boost :: asioには、ソケットとバッファーを受け取る読み取り関数があります。ただし、永続的にブロックしています。//read blocking data method //now bytesread = boost::asio::read(socket,buffer(readBuffer, max_length)); << perminatly blocks never seems to read. //was //bytesread = socket.read_some(buffer(readBuffer, max_length)); << after the 1st read it will always read one byte and need another
socket.read_some(...)呼び出しを呼び出して、残りを読み取ります。
仕事をするために何をする必要があり
boost::asio::read(...)
ますか?注..サーバーが分割されたデータを送信していないことを確認するためにwiresharkを使用しました。サーバーに障害はありません。