Oppure

Loading
22/10/13 14:44
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
Ultima modifica effettuata da sc73 22/10/13 14:45
aaa
22/10/13 14:50
sc73
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 22/10/13 14:51
aaa
22/10/13 14:51
pierotofy
Usando questa pagina come riferimento: msdn.microsoft.com/en-us/library/windows/desktop/…(v=vs.85).aspx
Il mio blog: piero.dev
23/10/13 9:01
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
aaa
23/10/13 9:15
sc73
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,'
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,'{parsed_message}', 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
', 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 23/10/13 9:16
aaa