Oppure

Loading
04/12/13 22:43
Valcars
Salve a tutti è da tanto che non scrivevo qui ma rieccomi a lamentarmi :)....
stavo creando un Client/Server su linux che però lo volevo compilarte sia su linux che su windows beh il mio problema è questo ho scritto i file con degli header creati da me e quando compilo il programma su linux non mi da nessun errore e gira perfettamente invece dopo aver compilato gli stessi file su windows (senza aver riscontrato errore) quando vado ad avviare il programma da terminale mi dice Errore durante il Bind() <--- Ovviamnente quello è il messaggio di errore che ho scritto io cmq vi provo a postare il codice perchè ragazzi non so dove sto sbagliando :(

File Header:
wlsock.h

char *ip;
struct sockaddr_in service, service2;
int m_socket;
int c_socket;
int c;


#ifdef __unix__

#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>



#elif defined(_WIN32) || defined(WIN32)
#define SO_WINDOWS

#include "winsock2.h"

WSADATA wsaData;
WORD wVersionRequested;
int wsaerr;

#endif



File server.c
#include <stdio.h>
#include "wlsock.h"

#define Mes printf

int main()
{
int a;
Mes("Messaggio benvenuto... \n");



#ifdef SO_WINDOWS

//Verifichiamo se c'è la libreria e la dll del winsock
wVersionRequested = MAKEWORD(2,2);

wsaerr = WSAStartup(wVersionRequested, &wsaData);
if(wsaerr != 0)
	{
	Mes("La DLL della winsock non e' stata trovata \n");
return 0;
	}
if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
	{
	Mes("La DLL non supporta questa versione di Winsock \n");
return 0;
	}
#endif


//Creazione Della Socket
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(m_socket ==-1)
	{
	Mes("Errore durante la creazione del Socket()! \n");
	return 0;
	}

//Settiamo la struttura sockaddr_in
service.sin_family = AF_INET;
service.sin_port = htons(2106);
service.sin_addr.s_addr = inet_addr("127.0.0.1");




//Funzione Bind
if(bind(m_socket,(struct sockaddr*) &service, sizeof(service)) < 0)
	{
	Mes("Errore durante la funzione Bind()! \n");
	return 0;
	}



//Funzione Listen
listen(m_socket, 3);

//Accetta la connessione
Mes("Attendere la connessione.... \n");

while(1)
	{
	//c = sizeof(struct sockaddr_in);
	c_socket = accept(m_socket, NULL, NULL);
//(struct sockaddr*) service2,(socklen_t*)&c);
	if(c_socket < 0)
		{
		Mes("Connessione non Accettata! \n");
		return 0;
		}
	else
		{
		Mes("Connessione Avvenuta con Successo! \n");
		return 0;
		}
	}



return 0;
}

Ultima modifica effettuata da Valcars 04/12/13 22:48
aaa
07/12/13 15:59
pierotofy
Qui potresti aggiungere:

Mes("Errore durante la funzione Bind()! \n");
        std::cout << WSAGetLastError();
        return 0;


E vedere cosa ti ritorna.

msdn.microsoft.com/en-us/library/windows/desktop/…(v=vs.85).aspx
Ultima modifica effettuata da pierotofy 07/12/13 15:59
Il mio blog: piero.dev
12/12/13 14:51
Valcars
Buonasera a tutti per non riapire un nuovo topic posto qui sotto perchè il problema è quasi uguale solo che ora l'errore del Bind mi esce su Sistema Operativo Linux. In pratica ho risolto il problema sotto windows grazie all'istruzione di Piero per vedere l'errore, ora volevo sapere se c'è una funzione anche su linux per vedere quale sia l'errore stampandolo sul terminale .... non so se stato abbastanza chiaro :P
aaa