2 CSocket in einer dialogbox



  • Hallo,
    ich schreibe ein FrontEnd für ne Datenbank, das netzwerktauglich sein soll. Jetzt probier ich das mit den CSockets aus und hab erstmal ( hab nur einen Computer) gedacht, ich packe einen, der empfängt, und einen, der sendet, in einen Dialog. Button2 aktiviert den Empfänger, Button1 sendet. Das klappt auch soweit, das ZoneAlarm anspringt, wenn der eine in den Listen-Modus geht bzw. der andere sendet. Leider kommt aber das Packet nicht an.

    void CCSocketDlg::OnButton1() 
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        int one=1, error;
    
        char* buffer="WWW";
    
        CSocket s;
        s.Create(5556,SOCK_STREAM,"192.168.121.254");
        s.SetSockOpt(SO_DEBUG,&one,sizeof(BOOL));
        s.Connect("192.168.121.254",5555);
    
        if( s.SendTo(buffer,sizeof(buffer),5555,"192.168.121.254"))
            MessageBox("gesendet");
        else
            error=s.GetLastError();
        switch(error)
        {
        case WSANOTINITIALISED:
            MessageBox("WSANOTINITIALISED");
            break;
        case WSAENETDOWN:
            MessageBox("WSAENETDOWN");
            break;
        case WSAEFAULT:
            MessageBox("WSAEFAULT");
            break;
        case WSAEINPROGRESS:
            MessageBox("WSAEINPROGRESS");
            break;
        case WSAEINVAL:
            MessageBox("WSAEINVAL");
            break;
        case WSAENETRESET:
            MessageBox("WSAENETRESET");
            break;
        case WSAENOPROTOOPT:
            MessageBox("WSAENOPROTOOPT");
            break;
        case WSAENOTCONN:
            MessageBox("WSAENOTCONN");
            break;
        case WSAENOTSOCK:
            MessageBox("WSAENOTSOCK");
            break;
        } 
        s.Close();
    
    void CCSocketDlg::OnButton2() 
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        int one=1;
        CAsyncSocket s2;
        s1.Create(5555,SOCK_STREAM,"192.168.121.254");
        s1.SetSockOpt(SO_DEBUG,&one,sizeof(BOOL),SOL_SOCKET);
        s1.Accept(s2);
        s1.Listen();
    
    }
    void CMySocket::OnReceive(int nErrorCode) 
    {
        // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
        char* buffer = new char[500];
        Receive(buffer,sizeof(buffer));
        MessageBox(NULL,buffer,"",MB_OK);
        CSocket::OnReceive(nErrorCode);
    }
    
    }
    

    Ich hab alles mit der if-Klausel durchgespielt und alles klappt. Nur dass die MessageBox aus OnReceive nicht anspringt.
    Weiß jemand Rat???



  • Ach so, Nachtrag,
    "192.168.121.254" ist die IP meines Computers im Netzwerk aus einem Computer.



  • Noch en Nachtrag.
    s1 ist meine Membervariable vom Typ CMySocket 🙂



  • Hat denn keiner Ahnung????????? 😕
    Ich hab das Accept mittlerweile schon in OnAccept verlegt, funzt aber immer noch nicht.
    Help 😞



  • OnAccept ist eine Message der Klasse CAsyncSocket.

    Du kannst auf einem Computer 2 deiner Programme laufen lassen und die Socketfunktionen nutzen.
    Hier benutzt du entweder die IP-Adresse oder "localhost"

    Da brauchst du nicht in einer Programminstanz einen Client und einen Server aufrufen.
    Dein Problem ist, daß CSockets nicht Asyncfunktionen sind und somit blockieren und damit zwar deine Clientcode ausgeführt wird aber nicht der Server (Jenachdem welches du zuerst startest.

    Ich würde mich aber ermal mit den Grundlagen beschäftigen bevor du Laufen lernst. (Siehe: ( hab nur einen Computer) gedacht, ich packe einen, der empfängt, und ....) Hier fehlen Socketgrundlagen ohne die du probleme bekommen wirst.



  • Hallo Unix-Tom, erstmal Danke,
    vielleicht liegt in dem Ansatz mit den zwei Anwendungen ja die Lösung. Das wäre ja eh das, worauf es später mal hinausläuft.
    Zu den Async-Funktionen: Da CAsyncSocket die Basisklasse zu CSocket darstellt, habe ich gedacht, dass ich in einer Instanz von CSocket auch die Asyncfunktionen aufrufen könnte. Aber vielleicht hat es genau daran gelegen.
    Zur Grundlagenbildung kann ich nur sagen, dass in CSocket und CAsyncSocket nicht viel gesagt wird. In der MSDN im allgemeinen habe ich noch nicht so viel gefunden. Da werde ich erstmal weitersuchen. Oder hast du vielleicht an irgendwelche Tutorials gedacht, irgendetwas, was man sich aus dem Internet runterladen kann? Wenn ja, würde ich mich freuen, wenn du was posten könntest.
    Auf jeden Fall erstmal Danke 🙂


Anmelden zum Antworten