CAsyncSocket



  • hallo leute,

    seit ca 2 monaten quäle ich mich mit diesem thema, ich habe einen server und einen client, zwischen denen ich strings austauschen kann.

    das alles funktioniert wunderbar.

    allerdings will ich auch den user immer mitschicken und vielleicht eine id
    also dachte ich, eine klasse statt einen string zu schicken wäre die lösung.

    nun will das leider nicht funktionieren, kann mir bitte jemand helfen?
    ein icq kontakt wäre mir an dieser stelle sehr lieb, vielleicht auch mail?

    icq: 41865860
    mail: cu@t3c.de

    ich brauch wirklich dringenst hilfe und wäre auch sehr dankbar



  • Setzt die ID einfach vor den eigentlichen String, was weis ich, vieleicht die ersten 3 zeichen oder so. Der server nimmt den String dann halt wieder auseinander. Ist zwar nicht perfeckt, sollte aber funktionieren.



  • Funktionieren tut's sicher.
    Hab selbst auch ein Prog nach diesem Prinzip erstellt.
    Allerdings würde mich auch interessieren wie man eine struct oder so was in der Art schicken kann.



  • ich hab da jetzt was von serialize aufgeschnappt

    mit diesem prinzip soll man eine klasse als string darstellen können,
    verschicken und danach mit unserialize wieder als klasse aufarbeiten

    kann dazu jemand mehr sagen??



  • Ich hab das selber noch nicht Ausprobiert, aber ich dacht eingentlich immer das das genauso funktioniert wie Read/Write von CFile. Also die Struktur/Klasse muss Client und Server Bekannt sein und dann wird eben ein Object davon mit Send(&MyClass,sizof(MyClass)) verschickt oder halt mit Receive(&MyClass,sizeof(MyClass)) empfangen.



  • Es läuft immer darauf hinaus das nur Zeichen versendet werden.

    Eine Klasse kann man nicht versenden. Ob MFC eine Funktion dafür anbietet ist aber leicht Möglich. Diese macht aber auch nichts anderes als die Zeichen wieder zu zerlegen.



  • also was wäre unterm strich dann für mich die beste möglichkeit das zu handeln?



  • Wenn du dir selbst ein kleines Protocoll definierst.

    z.B

    Es kommt der String

    BEGINN,id,text,END

    BEGINN und ENDE deshalb um zu wissen ob alle Daten angekommen sind da man nicht vorhersagen kann wie die Daten fragmentiert sind.



  • hört sich schon mal gut an, nur wie lang muss der string dann sein wenn es ein chat ist? einfach mal 1000 zeichen buffern?



  • Bei AnsyncSockets brauchst du nur zu warten bis alle Daten da sind und diese dann verarebiten.
    Wie du das zwischenspeicherst kann ich dir auch nicht sagen da ich deine Clientenverwaltung nicht kenne.



  • das ganze sieht so aus, und die Receive funktion verlangt doch einen buffer?

    void CSockDlg::OnReceive()
    {
    	char *pBuf = new char[1025];
    	int iBufSize = 1024;
    	int iRcvd;
    	CString strRecvd;
    
    	iRcvd = m_sConnectSocket.Receive(pBuf, iBufSize);
    
    	if (iRcvd == SOCKET_ERROR)
    	{
    	}
    	else
    	{
    		pBuf[iRcvd] = NULL;
    		strRecvd = pBuf;
    		m_ctlRecvd.AddString(strRecvd);
    		m_ctlRecvd.
    		UpdateData(FALSE);
    	}
    }
    

Anmelden zum Antworten