0

TCP/IP サーバーに接続する C++ で boost::asio を使用してクライアント プログラムを作成しました。「llist」というコマンドを送信すると、返されます

? "llist"
l1 32x32 Video "Video L1"
l2 512x512 Video "Audio L2"

各センテンスは改行文字で終わり、送信の最後には余分な改行文字があります。したがって、リスニング関数はソケットから2文字を読み取ります

 len=_socket->read_some(boost::asio::buffer(reply,sizeof(reply)),error);// char reply[2];

問題は、動作しない場合に「\n」を使用してチェックするときです。

  if(reply[0]!='\n')
    if(reply[1]!='\n')
       str.insert(i,1,reply[0]); //std::string str;

何が問題になる可能性がありますか?

4

1 に答える 1

3

何が問題になっているのかについてはあまり詳しく説明していませんが、推測では、現在の読み方では有効な文字(つまり、何が入っているかreply[1])が削除されます。

boost::asio::read_until代わりに、行全体を読み取るために使用できます。

boost::asio::read_until(socket, buffer, '\n');

空の行を送信の終わりとして扱います。

于 2013-03-05T13:27:48.047 に答える