我是否應該閱讀每個字符,直到它到達\ n字符,將它們全部結合在一起並返回,還是有更好的方法?我應該使用std :: string還是char?如何從套接字讀取並返回單個行?
我嘗試以下兩個例子,但我需要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 2010-11-29 21:30:38
,如果我將其更改爲buf [DEFAULT_BUFLEN](不確定如果我不好),那麼它可以工作,但只返回第一行,其餘爲空字符串。 – thorvald 2010-11-29 22:09:20