Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - sockets
Forum - C/C++ - sockets - Pagina 3

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
sc73 (Normal User)
Rookie


Messaggi: 56
Iscritto: 07/06/2012

Segnala al moderatore
Postato alle 16:50
Martedì, 22/10/2013
Testo quotato

Postato originariamente da sc73:

    int err;

        WSAStartup(MAKEWORD(2,2), &wsda);
    err = WSAGetLastError();   // err = 0
    m_serversocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    err = WSAGetLastError();   // err = 0
    if(m_serversocket == -1)
    {
        MessageBox::Show("Socket Initialiation Error","Error", MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
    }

    if((err = bind(m_serversocket, (SOCKADDR*)&serveraddr,sizeof(SOCKADDR_IN))) < 0)
   // err = 0xffffffff



Chiedo SCUSA!!
Questo é un errore mio: ho chiamato la bind prima di inizializzare la struttura serveraddr
Ora provo a gestire la lettura periodica dalla porta


Ultima modifica effettuata da sc73 il 22/10/2013 alle 16:51
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:51
Martedì, 22/10/2013


Il mio blog: https://piero.dev
PM Quote
Avatar
sc73 (Normal User)
Rookie


Messaggi: 56
Iscritto: 07/06/2012

Segnala al moderatore
Postato alle 11:01
Mercoledì, 23/10/2013
Scusate, mi succede una cosa strana.
Ho sequenzializzato meglio l'inizializzazione per la socket:

    WSAStartup(MAKEWORD(2,2), &wsda);
    if ((err = WSAGetLastError()) == 0) {
        s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        if ((err = WSAGetLastError()) == 0)
        {
            serveraddr.sin_family = AF_INET;
            serveraddr.sin_addr.s_addr = INADDR_ANY;
            serveraddr.sin_port = htons( 1234 );
            if((err = bind(m_serversocket, (SOCKADDR*)&serveraddr,sizeof(SOCKADDR_IN))) < 0)
            {
                Str = String::Format("ERROR binding in the server socket {0}", err);
                MessageBox::Show(Str,"Error", MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
                exit(EXIT_FAILURE);
            }
        } else {
            Str = String::Format("Socket Initialiation Error {0}", err);
            MessageBox::Show(Str,"Error", MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
            exit(EXIT_FAILURE);
        }
    } else {
        Str = String::Format("WSAStartup Error {0}", err);
        MessageBox::Show(Str,"Error", MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
        exit(EXIT_FAILURE);
    }

Ora peró si ferma con "ERROR binding in the server socket -1"
Ho guardato la tabella dei codici ma non trovo -1.
Qualcuno mi sa dire cosa sta succedendo?

Grazie

PM Quote
Avatar
sc73 (Normal User)
Rookie


Messaggi: 56
Iscritto: 07/06/2012

Segnala al moderatore
Postato alle 11:15
Mercoledì, 23/10/2013
Testo quotato

Postato originariamente da sc73:

Scusate, mi succede una cosa strana.
Ho sequenzializzato meglio l'inizializzazione per la socket:

    WSAStartup(MAKEWORD(2,2), &wsda);
    if ((err = WSAGetLastError()) == 0) {
        s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        if ((err = WSAGetLastError()) == 0)
        {
            serveraddr.sin_family = AF_INET;
            serveraddr.sin_addr.s_addr = INADDR_ANY;
            serveraddr.sin_port = htons( 1234 );
            if((err = bind(m_serversocket, (SOCKADDR*)&serveraddr,sizeof(SOCKADDR_IN))) < 0)
            {
                Str = String::Format("ERROR binding in the server socket {0}", err);
                MessageBox::Show(Str,"Error", MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
                exit(EXIT_FAILURE);
            }
        } else {
            Str = String::Format("Socket Initialiation Error {0}", err);
            MessageBox::Show(Str,"Error", MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
            exit(EXIT_FAILURE);
        }
    } else {
        Str = String::Format("WSAStartup Error {0}", err);
        MessageBox::Show(Str,"Error", MessageBoxButtons::OK,MessageBoxIcon::Asterisk);
        exit(EXIT_FAILURE);
    }

Ora peró si ferma con "ERROR binding in the server socket -1"
Ho guardato la tabella dei codici ma non trovo -1.
Qualcuno mi sa dire cosa sta succedendo?

Grazie



Risolto, dopo varie prove ho usato la WSAGetLastError() invece di controllare direttamente la bind

Ora invece ho il problema sulla receive:

- attivo un timer che va a leggere ogni 100ms
- allo scadere del timer eseguo le seguenti istruzioni:

    struct sockaddr_in server, si_other;
    int slen , recv_len;
    char buf[256], Str[256];

    //clear the buffer by filling null, it might have previously received data
        memset(buf,'\0', 256);
        
        //try to receive some data, this is a blocking call
        recv_len = recvfrom(s, buf, 256, 0, (struct sockaddr *) &si_other, &slen));
        
        label20->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi(IntPtr(buf));
        

Risultato:
buff é sempre vuoto.
Qualcuno mi sa indicare come mai?

Grazie

Ultima modifica effettuata da sc73 il 23/10/2013 alle 11:16
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo