CAsyncSocket::Connect



  • Hallo Leute.
    Ich versuche einen CAsyncSocket mit einem anderen zu verbinden mit Connect.
    Der andere ist im Listen-Zustand. Auf mein Connect bekomme ich nur die WSAEWouldblock-Fehlermeldung.
    Was mache ich falsch?
    Danke Jens



  • Zeig mal den Code
    !



  • void CCSocketDlg::OnButton1() 
    {
        m_s=new CMySocket;   /////public CAsyncSocket
        for(int i=0;i<10;i++)
        {
            m_s->Create();
            CString string;
            m_s->Connect("localhost",7000);
            string.Format("%d: %d ",i,m_s->GetLastError());
            m_arStrings.Add(string);
            m_s->Close();
            Sleep(100);
        }
    
        delete m_s;
        m_s=NULL;
        CString string;
        for(i=0;i<m_arStrings.GetSize();i++)
            string+=m_arStrings.GetAt(i);
        MessageBox(string);
        m_arStrings.RemoveAll();
    }
    
    void CMySocket::OnConnect(int nErrorCode) 
    {
        if(nErrorCode==0)
        {
            char* buffer = "OnConnect";
            Send(buffer,sizeof(buffer));
        }
        else
        {
            CString string;
            string.Format("OnSend Error: %d",nErrorCode);
            MessageBox(NULL,string,"OnSend",MB_OK);
        }
        CAsyncSocket::OnConnect(nErrorCode);
    }
    
     In ReceiveSocketDlg::OnInitDlg:
    
        if(s.Create(7000))   ////MemberVariable CMySocket s
        {
            MessageBox("Created");
            if(s.Listen(27))
                MessageBox("Listen");
    
        }
        else
            MessageBox("not Created");
    
    void CMysocket::OnAccept(int nErrorCode) 
    {
        // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
        if(nErrorCode==0)
        {
            CMysocket s;
            Accept(s);
        }
        else
        {
            CString string;
            string.Format("Accept Error: %d",nErrorCode);
            MessageBox(NULL,string,"",MB_OK);
        }
        CAsyncSocket::OnAccept(nErrorCode);
    }
    
    void CMysocket::OnReceive(int nErrorCode) 
    {
        // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
        if(nErrorCode==0)
        {
            char* buffer= new char[88];
            int count = Receive(buffer,sizeof(buffer));
            buffer[count]=0;
            MessageBox(NULL,buffer,"OnReceive",MB_OK);
            delete[] buffer;
        }
        else
        { 
            CString string;
            string.Format("Receive Error: %d",nErrorCode);
            MessageBox(NULL,string,"Receive",MB_OK);
        }
        CAsyncSocket::OnReceive(nErrorCode);
    }
    

    So, hier der Code. Hat schon mal geklappt. Sogar ca.10 Mal hintereinander. Dann nur noch WSAEWOULDBLOCK.



  • Vermisse WSAINIT bin mir aber nicht sicher ob du es brauchst ich denke aber schon deswegen könnte der Fehler entstehen...

    Desweiteren Bezweifele ich das ein anderer Computer mit dem offenen Port kommunizieren kann, denn du öffnest einen Port zum Localhost....
    Zwischen Localhost und der IP Adresse deines Rechners besteht ein großer unterschied.....

    Localhost 127.0.0.1:7000
    IP x.x.x.x:7000

    [ Dieser Beitrag wurde am 23.12.2002 um 15:41 Uhr von DaDaywalker editiert. ]



  • Hi,
    es handelt sich um 2 Dialogboxen (auf demselben Rechner) mit WOSA-Unterstützung, da ist das WSAInit im CWinApp::InitInstance automatisch mit drin.

    Ich habe es mal mit SOCK_DGRAM versucht, jetzt klappt es. Ich rufe das Send einfach direkt auf.
    Danke Jens



  • Schau dir mal VC++ 6 in 21 Tagen an. Dort gibt es ein Bsp. für AsyncSockets


Anmelden zum Antworten