Suis-je censé lire chaque caractère jusqu'à ce qu'il atteigne le caractère \ n, les joindre tous ensemble et revenir ou y a-t-il un meilleur moyen? Dois-je utiliser std :: string ou char pour cela?Comment lire à partir d'une socket et renvoyer des lignes individuelles?
J'ai essayé les deux exemples suivants mais je dois les lire comme des lignes distinctes
Exemple 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!");
}
Exemple 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;
}
}
En utilisant la deuxième méthode, que je reçois cette erreur - erreur C2664: 'recv': ne peut pas convertir le paramètre 2 de 'unsigned char [512]' à 'char *' Types souligné ne sont pas liés; la conversion nécessite reinterpret_cast, cast de style C ou cast de style fonction – thorvald
et si je le change en buf [DEFAULT_BUFLEN] (je ne sais pas si c'est mauvais) alors ça marche mais seulement la première ligne est retournée et le reste sont des chaînes vides. – thorvald
Comme le message d'erreur dit, utilisez un type de cast: 'result = recv (m_socket, (char *) buf, DEFAULT_BUFLEN, 0);' –