質問: sizeof(client)と,バッファのサイズに関しては,手を付けていない. ### 補足情報(言語/FW/ツール等のバージョンなど) ・Visual Studio2015 C++ ・OpenCV3.1 ←Nugetから入手 ・winsock2.h
回答: >・クライアント側で,文字が最初の3文字しか受け取れない recvfrom命令はその時点でバッファに格納されているデータを読み出す命令です。指定したサイズのデータを読み出す命令ではありません。1回のsendto呼び出しで送信したデータが複数回に分かれて受信される事もありますし、逆に2回のsendto呼び出しで送信したデータが1回で受信される事もあります。必要なデータが揃うまで、recvfromを複数回呼び出してデータを結合するように修正して下さい。 ただ3バイトだけというのは、それはそれで異常です。見てみると「cout << "received : " << buf;」で出力していますが、4バイト目に0x00が格納されていませんか?C++ではバイト列中に含まれる0x00を文字列の終端として扱うので、バイナリデータを文字列系のAPIでは扱えませんよ。 ・バッファのサイズを大きくすると,オーバーフローとなってしまう. スタックオーバーフローのことですか?バッファをスタック上に作成しているようですが、スタックのサイズは通常1Mバイト程度でしかありません。ビルド時の設定で増やすことも出来ますが、スタック領域ではなくヒープ領域に確保するように直した方が良いでしょう。 ・サーバ側の, len = sizeof(client); の意味がわからない. socket APIはIPv4専用のAPIではありません。それ以外の様々な通信プルトコルでも使用します。そのためアドレスを表す構造体のサイズも固定ではなく、メモリサイズを引数として渡すように設計されています。