Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Zusammen,

ich habe auf meinem PC ein MFC Serverprogramm am laufen wo ich die Klassen

CAsyncSocket verwende.

und ein GTK C++ Programm welches als Client auf meinem PDA läuft.

Beim Client verwende ich Standard C++ Befehle. connect, read, write

Beim Client stelle ich die Verbindung folgendermaßen her:

int laenge;   

unsigned short int portnummer = 7676;

char ip_adresse[] = "192.168.178.24";


struct sockaddr_in adresse;

socket_nummer = socket(AF_INET, SOCK_STREAM, 0);

adresse.sin_family = AF_INET;

adresse.sin_addr.s_addr = inet_addr(ip_adresse);


adresse.sin_port = htons(portnummer);

laenge = sizeof(adresse);

server_socket = connect(socket_nummer, (struct sockaddr *)&adresse, laenge); 
Um einen String vom Server zu Empfangen verwende ich:
read(socket_nummer,empfangene_files,sizeof(empfangene_files));

das ganze funktioniert auch ganz prima, das problem ist nur dass wenn ich vom MFC Server zweimal hintereinander ein SEND absetze das am PDA als "ein einziger string" ankommt?

Kann ich beim CAsyncSocket.Send irgendein "ENDEZEICHEN" mitgeben? Damit der PDA es checkt das ich zweimal was geschickt hab?

Aktuell hab ich nach jedem Send ein Sleep eingebaut. aber das macht das Programm unnötig langsam :(

Viele Grüße

Stefan

Geschrieben
das ganze funktioniert auch ganz prima, das problem ist nur dass wenn ich vom MFC Server zweimal hintereinander ein SEND absetze das am PDA als "ein einziger string" ankommt?
Das ist kein Problem, sondern ein völlig normales Verhalten. Du hast einen Stream-Socket erstellt (SOCK_STREAM), also hast du einen Strom von Bytes zwischen den Endpunkten. Es gibt da keine Markierungen, wo ein send-Aufruf endete und der nächste anfing. Diese Information wird einfach nicht übermittelt.

Es kann übrigens auch passieren, dass dir ein recv-Aufruf weniger Daten liefert, als beim send abgeschickt wurden, und du dir die Daten mit wiederholten recv-Aufrufen zusammenstückeln musst, bis du alles hast, was du brauchst.

Kann ich beim CAsyncSocket.Send irgendein "ENDEZEICHEN" mitgeben? Damit der PDA es checkt das ich zweimal was geschickt hab?
Wenn der das Empfänger nicht anhand der empfangenen Bytes erkennen kann (feste Größe der Nachricht?), dann musst du so etwas wohl tun. Denk dir ein "Endezeichen" aus, das sonst so in deinem Datenstrom nicht vorkommen kann. Was gesendet wird, hast du doch selbst in der Hand.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...