Forum - C/C++
- sockets - Pagina 3
Pagine: [ 1 2 3 ]
|
sc73 (Normal User)
Rookie
Messaggi: 56
Iscritto: 07/06/2012
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
pierotofy (Admin )
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
sc73 (Normal User)
Rookie
Messaggi: 56
Iscritto: 07/06/2012
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
sc73 (Normal User)
Rookie
Messaggi: 56
Iscritto: 07/06/2012
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