U
das Server-Emfpangen hatten wir doch vor kurzem schon mal in nem anderen Thread, richtig?!
int Socket::TCP_recv(std::string& s) const
{
char buf[MAXRECV];
int status = ::recv(m_sock, buf, MAXRECV, 0);
if(status != SOCKET_ERROR)
{
s = std::string(buf, buf+status);
return status;
}
else
{
throw SockExcept( "Fehler in Socket::recv" );
return 0; //unreachable code
}
}
->
std::string Socket::TCP_recv()
{
char buf[MAXRECV];
int status = ::recv(m_sock, buf, MAXRECV, 0);
if(status == SOCKET_ERROR)
throw SockExcept( "Fehler in Socket::recv" );
return std::string(buf, buf+status);
}
/* Anwendung:
std::string rcv = socket_instanz.TCP_recv();
*/
das const hab ich auch mit absicht weggemacht - eine methode sollte nur const sein, wenn sie beliebig oft ausführen kann und sich der status des objekts dadurch nicht ändert...
das Senden:
void Socket::TCP_send(std::string &s)
{
int status = ::send(m_sock, s.c_str(), s.size(), 0);
if(status == SOCKET_ERROR)
throw SockExcept("Fehler in Socket::send");
s.erase(s.begin(), s.begin()+status);
}
/* Anwendung:
std::string to_send = "asdasd";
while(! to_send.empty())
{
socket_instanz.TCP_send(to_send);
};
*/
bb
PS: Zum eigtl Problem:
std::getline
kopiert alle zeichen vom anfang bis zum ersten zeilenumbruch(oder anderem angegebenem Zeichen) in den output_string. Das angegebene Zeichen ist das erste, was _nicht_ mehr mitkopiert wird aber das letzte, was aus dem stream entfernt(als gelesen markierte) wurde...
es gibt also auch nichts zu senden - der Aufruf wird so in etwa aussehen:
send(socket, nullptr, 0, 0);
sieht mir nach implementation-defined Verhalten aus - je nach dem, wie send implementiert ist entweder undefined oder send kehrt direkt wieder zurück, ohne was gemacht zu haben - gab ja auch nichts zu senden...
also implementieren wir das senden an sich einfach so:
const char the_endl_char='\n';
std::string to_send;
std::getline(std::cin, to_send, the_endl_char);
to_send.push_back(the_endl_char);
//to_send senden
hier ists güt möglich, dass es nen schöneren/besseren weg gibt
vll mit unget und get oder so - kann ich nicht beurteilen - ich würds aber mit der konstante machen^^
bb