[MFC/C++] - CSockets, recive/send

Permalänk
Medlem

[MFC/C++] - CSockets, recive/send

Har ett litet nätt problem som jag hoppas att någon kan hjälpa mig med.
Det är så här att jag har skapat en klient och en server och nu vill jag skicka en struct emellan dem. Och då till min fråga; hur gör jag detta?

//Structen struct Msg { int type; CString mess; CRecordset boom; }; // Skapa koppling CSocket server; int listenPort = 55555; server.Create(listenPort); server.Listen(); CSocket grab; server.Accept(grab); Msg* test = new Msg(); //Skicka data grab.Send((Msg*)test, sizeof(Msg), 0); //Ta emot data grab.Receive((Msg*)test, sizeof(Msg), 0);

Detta funkar tyvärr inte tillfredsställande då det bara blir kaos av allt. Dvs. Structvarabeln är tom vid mottagning osv.
Så om någon har något exempel eller någon bra idé på hur detta ska lösas så skulle jag bli väldans glad.

Jag har kollat FAQ och den hjälpte inte denna gång.

Permalänk
Glömsk

Servern:
Först socket()
Sen listen()
Sen bind()
Sen accept() (notera att det här är en ny socket)
Sen send/recv

Klienten:
Först socket()
Sen connect()
Sen send/recv()

Edit: Notera att du skapar blocking sockets här. Programmet stannar alltså vid vissa funktioner, exempelvis listen. Ska du skapa något annat än ett konsolprogram får du använda asynkrona sockets

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem

Ahh sedär, CAsyncSocket kanske är smartare att använda. Fast just för tillfället så ligger mitt intresse enbart i att kunna skicka den där structen fram och tillbaka så det gör inget att den stannar vid vissa funktioner.
Jag tror inte felet ligger i själva uppkopplingen utan mer i send- och recivefunktionerna.

Permalänk
Glömsk

Tips: Har du skapat windowsprogram tidigare och kan din meddelandehantering (!) så kommer asynkrona sockets framstå som ohyggligt mer logiska.

Grunderna i nätverksprogrammering är ganska enkelt att lära sig om man skiljer på funktionerna och parametrarna till funktionerna. Nu vet jag inte hur det är med CSocket (MFC är inte min grej) jag antar att det stämmer här med.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem

Inga windowsprogram tidigare tyvärr.

Kanske skulle ha sagt att jag har fått det att fungera att skicka text emellan client och server men det är just structen som inte vill sig.

Permalänk
Medlem

För att kunna skicka objekt (structen) måste du ju serialisera objektet innan du skickar, antar jag iallafall. Det måste man i Java om man ska kunna skicka objekt mellan klient och server via en socket. Är nästan helt säker på att så är fallet här också.
Jag skulle undersöka den möjligheten som finns att spara hela objekt i filer, då borde det gå göra så att innehållet hamnar på socketen istället för filen.
Jag är dock INTE säker på om detta skulle fungera.