文字が\ n文字に達するまでそれぞれの文字を読んで、それらを一緒に結合して返しますか、より良い方法がありますか?私はこのためにstd :: stringまたはcharを使うべきですか? ソケットから読み込んで個々の行を返すにはどうしたらいいですか?
は、私は次の2つの例を試してみましたが、私は1例別の行として、それらを読んでする必要があります。
std::string sockread()
{
std::string s;
s.resize(DEFAULT_BUFLEN);
int result = recv(m_socket, &s[0], DEFAULT_BUFLEN, 0);
if (result > 0) {
return s;
} else if (result == 0) {
connected = false;
} else {
std::cout << "recv failed with error " << WSAGetLastError() << "\n";
}
throw std::runtime_error("Socket connection failed!");
}
例2:
char sockread(void)
{
int result;
char buffer[DEFAULT_BUFLEN];
result = recv(m_socket, buffer, DEFAULT_BUFLEN, 0);
if (result > 0) {
return *buffer;
}
else if (result == 0)
{
connected = false;
return *buffer;
}
else {
printf("recv failed with error: %d\n", WSAGetLastError());
return *buffer;
}
}
第二の方法を使用して、私はこのエラーを取得しています - エラーC2664:「RECV」:からパラメータ2を変換することはできません「unsigned char型[512]」 タイプが指さ「のchar *」には無関係です。変換はreinterpret_cast、Cスタイルのキャストまたはファンクションスタイルのキャスト – thorvald
を必要とし、buf [DEFAULT_BUFLEN]に変更すると(悪いかどうかわからない場合)、最初の行だけが返され、残りは空の文字列になります。 – thorvald
エラーメッセージのように、タイプキャストを使用してください: 'result = recv(m_socket、(char *)buf、DEFAULT_BUFLEN、0); ' –