Avatar billede stigc Nybegynder
26. maj 2001 - 14:24 Der er 11 kommentarer og
2 løsninger

Sende objekt over socket

Jeg sender et objekt over socket. Dette objekt er helt statisk, og fylder 5152 bytes, men min socket på klienten læser kune ca. 3800 bytes og stopper læsningen og kører videre i programmet, uden fejl...

Alle attributter i objektet er statiske. Jeg har et andet objekt der går fint, som også er statisk.

Nogen af atributterne i objektet er som følgende;

    char symboltabel[17][20];
    char vartabel[100][20];
    char idtabel[100][20];

er det et problem?



Avatar billede stigc Nybegynder
26. maj 2001 - 14:30 #1
hmm... der findes åbenbart også 2-dem. arrayes i det andet objekt, som kan sendes fint over socket.


Her er headeren til klassen:


class SymbolListe
{
    private:
    int idtabelCounter;
    int vartabelCounter;
   
   
    public:
    int foelgecounter;
    char symboltabel[17][20];
    char vartabel[100][20];
    char idtabel[100][20];
   
    SymbolListe();
    void tilfoejTilSymbolfoelge(string);
    int symbolfoelge[100];
    int symbolfoelgeType[100];
    // 1 - keyword
    // 2 - variable (1,2,\'sgsdg\')
    // 3 - ID
   
};
Avatar billede miclarsen Nybegynder
26. maj 2001 - 15:00 #2
Det var et godt spørgsmål, bare jeg dog havde svaret!
Avatar billede rasmusneckelmann Nybegynder
26. maj 2001 - 19:58 #3
Hvad for en slags sockets bruger du? Hvis det bare er TCP så er det jo bizart!
Avatar billede stigc Nybegynder
26. maj 2001 - 20:08 #4
Ja jeg bruger TCP sockets.
Er jeg helt galt afmarcheret, eller burde det ikke kunne lade sig gøre?
Avatar billede mickni33 Nybegynder
28. maj 2001 - 23:04 #5
Er din socket skrevet med C system kald?
For så kan det ikke lade sig gøre. objekter, string og templates kan ikke overføres på den måde da C sproget jo ikke har dem implementeret.
Derimod skal du hellere går over til et struct objekt, det vil nok virke....måske.
Avatar billede stigc Nybegynder
28. maj 2001 - 23:09 #6
mickni33  >> Sockets behøver da ikke kende mine objekter! Den tager det bare som en strøm af bytes fra hukommelsen. Først på server side når man lægger disse bytes i rammen, skal programmet kende objektet i forvejen.
Avatar billede stigc Nybegynder
28. maj 2001 - 23:10 #7
string er en dynamisk struktur så det giver problemer, hvis man ikke tænker sig om
Avatar billede mickni33 Nybegynder
28. maj 2001 - 23:12 #8
Det er rigtig nok. Men der stod bare øverst oppe \' sende objekt over socket\'.
Avatar billede stigc Nybegynder
28. maj 2001 - 23:17 #9
det er også det jeg vil, men sockets ser dem jo selvfølgelig bare som bytes, ligesom hvis du sendte en struct. :)
Avatar billede mickni33 Nybegynder
28. maj 2001 - 23:25 #10
Nej det tror jeg ikke, for jeg prøvede at sende noget over som kun indholdte integer til at starte med det virkede godt nok, men lige så snart jeg ville overføre en template, T array[] så gik der lort i den. og ligesådan gik det da jeg prøvede et objekt der havde integers og strings.
Jeg har gjort det at jeg skriver resultatet af en select statement ned på en fil derefter henter jeg statement resultatet char by char ind igen og write() tilbage til clienten igen, så har en buffer der tager imod.
(virker ikke 100% endnu, laver rapport)
Avatar billede stigc Nybegynder
28. maj 2001 - 23:29 #11
strings kan du stadig ikke sende da de er dynamiske, og hvis din template er et object med dynamisk struktur, så er det derfor det ikke virker.

Jeg har droppet at sende hele objekter, men sender nu attributterne en af gangen. Det virker fint, men det ville da være nemmere det andet :)
Avatar billede mickni33 Nybegynder
28. maj 2001 - 23:34 #12
Ja helt bestemt..Man burde egentlig have fået besked på, at være opmærksom på ulempen ved at blande C/C++ så kunne man have sparet en masse og have lavet det på \'den grimme måde\' :)
Men det burde sku kunne laves smartere.....Irriterende.
Avatar billede stigc Nybegynder
14. juni 2001 - 16:31 #13
fandt ikke svaret......

Lidt for din hjælpsomhed
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester