string & int aufeimal mit winsock senden / empfangen
-
Hi,
ich möchte über einen socket ein int unt einen string auf einmal versenden und dann wieder empfangen.
Ist das möglich, ohne das int in den string "reizubasteln"?// Daten versenden via TCP bool Socket::send( const string s, const int c ) const { //sende string int status = ::send ( m_sock, s.c_str(), s.size(), 0 ); string msgid; msgid = (char)c; //sende int int status2 = ::send ( m_sock, msgid.c_str(), msgid.size(), 0 ); if ( status == -1 | status2 == -1 ) { return false; } else { return true; } }Hier ist die funktion für das versenden von 2 daten auf einmal, stimmt das so?
wie muss ich nun die funktion zum recieven verändern, damit er beide daten empfängt?
int Socket::recv ( string& s, int& c ) const { char buf [ MAXRECV + 1 ]; s = ""; c = 0; memset ( buf, 0, MAXRECV + 1 ); int status = ::recv ( m_sock, buf, MAXRECV, 0 ); if ( status > 0 || status != SOCKET_ERROR ) { s = buf; return status; } else { throw SockExcept("Fehler in Socket::recv"); return 0; } }kann jemand helfen?
-
hi
nein du musst den int in dein char vector transformieren.
die funktion send & recv erwartet char!lowbyte
-
lowbyte_ schrieb:
hi
nein du musst den int in dein char vector transformieren.
die funktion send & recv erwartet char!lowbyte
So ein schwachsinn:
int i = 10; send ( m_sock, &i, sizeof(i), 0 );evtl noch casten.
-
hi
du musst nicht schreiben wenn du es nicht verstehst !
mit deiner minderwertigen variante kannst du höchstens ein int von 255 speichern,da ein char 8bit hat und somit hochstens den wert 255 annehmen kann.!
verstanden?wie willst du zbsp. die zahl 4545 handhaben?
das geht nur mit einer transformation von int zu char array !lowbyte
-
hi
na gut so geht es auch.
aber seine frage war doch, wie man ein int und char zusammen transferieren kann!lowbyte
-
hi
und casten musst du bei deiner variante auf jeden fall.
doch dies ist unschön und nur gefrickel.lowbyte
-
hi
seine send data over tcp funktion, ist sowiso nichts. wer sag dir das send alle daten auf einmal sendet? bei send musst du selber prüfen ob die daten alle gesendet werden konnten... bzw. return value prüfen, und wen nötig nichtgesendete daten nachschicken bis die funktion alles in allem soviel gesendet hat wie du mit datalen definiert hast.
das andere ist das man in einer solchen funktion nichts weiter als den sendevorgang behandelt. damit ist gemeint das du die string(daten) aufbereitung ausserhalb definieren solltest.
zu deinem int char problem...
ich sehe einfach die gecastete version als schlecht an.
wie man es jetz machen will ist jedem das seine.
in deinem fall würde ich eher alles von int nach char convertieren vor dem aufruf deiner funktion...somit ist casten überflüssig.lowbyte