Socket

di il
12 risposte

Socket

Salve,dovrei scrive un programma client server in c,con l'eclipse con portabilita sia in windows che linux,ho fatto la connessione pero mi da errore,chi potrebbe aiutarmi,ho urgenza???
grazie mille

12 Risposte

  • Re: Socket

    
    //server
    #if defined WIN32
    #include <winsock.h>
    #else
    #define closesocket close
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #endif
    #include <stdio.h>
    #include <stdlib.h>
    
    void ClearWinSock() {
    						#if defined WIN32
    						WSACleanup();
    						#endif
    								}
    int main(void) {
    
    #if defined WIN32
    
    
    WSADATA wsaData;
    	int iResult = WSAStartup(MAKEWORD(2 ,2), &wsaData);
    	if (iResult != 0){
    						printf ("error at WSASturtup\n");
    						return 0;
    															}
    #endif
    	// CREAZIONE DELLA SOCKET
    	int Mysocket;
    	Mysocket= socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (Mysocket < 0) {
    		printf(" creazione socket fallita \n");
    		return 0;
    			}
    	// ASSEGNAZIONE DI UN INDIRIZZO ALLA SOCKET
    
    	struct sockaddr_in sad;
    	memset(&sad, 0, sizeof(sad));
    	sad.sin_family = AF_INET;
    	sad.sin_addr.s_addr = inet_addr("127.0.0.1");
    	sad.sin_port = htons(45890);
    
    	if (bind(MySocket, (struct sockaddr*) &sad, sizeof(sad)) < 0) {
    	ErrorHandler("bind() failed.\n");
    	closesocket(MySocket);
    	ClearWinSock();
    	return 0;
    
    	}
    	// SETTAGGIO DELLA SOCKET ALL'ASCOLTO
    
    	int qlen=10;
    	if (listen (Mysocket, qlen) <0) {
    									printf("listen() failed.\n");
    									closesocket(Mysocket);
    										return 0;
    													}
    	// ACCETTARE UNA NUOVA CONNESSIONE
    
    	struct sockaddr_in cad;
    	int clientSocket;
    	int clientLen;
    	printf("in attesa di connessione \n");
    
    	while (1) {
    
    		clientLen = sizeof(cad);
    		if ((clientSocket = accept(MySocket, (struct sockaddr *)&cad,&clientLen)) < 0){
    			ErrorHandler("accept() failed.\n");
    			// CHIUSURA DELLA CONNESSIONE
    			closesocket(MySocket);
    			ClearWinSock();
    			return 0;
    			}
    
    		}
    
    
    	}
    
    
    
    ----------------------------------------------------------------------------
    client
    
    #if defined WIN32
    #include <winsock.h>
    #else
    #define closesocket close
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #endif
    #include <stdio.h>
    #include <stdlib.h>
    #define BUFFERSIZE 512
    
    void ErrorHandler(char *errorMessage) {
    printf(errorMessage);
    }
    void ClearWinSock() {
    #if defined WIN32
    WSACleanup();
    #endif
    }
    
    int main(void) {
    #if defined WIN32
        WSADATA wsaData;
    	int iResult = WSAStartup(MAKEWORD(2 ,2), &wsaData);
    	if (iResult != 0){
    	printf ("error at WSASturtup\n");
    	return 0;
    	}
    #endif
    	// CREAZIONE DELLA SOCKET
    	int Csocket;
    
    	Csocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (Csocket < 0) {
    	ErrorHandler("socket creation failed.\n");
    	closesocket(Csocket);
    	ClearWinSock();
    	return 0;
    
    	}
    	// COSTRUZIONE DELL’INDIRIZZO DEL SERVER
    	struct sockaddr_in sad;
    	memset(&sad, 0, sizeof(sad));
    	sad.sin_family = AF_INET;
    	sad.sin_addr.s_addr = inet_addr( "127.0.0.1" );
    	sad.sin_port = htons( 45890 );
    
    	// CONNESSIONE AL SERVER
    
    	if (connect(Csocket, (struct sockaddr *)&sad, sizeof(sad)) < 0)
    	{
    	ErrorHandler( "Failed to connect.\n" );
    	closesocket(Csocket);
    	ClearWinSock();
    	return 0;
    	}
    
    
    	// CHIUSURA DELLA CONNESSIONE
    	closesocket(Csocket);
    	ClearWinSock();
    	printf("\n");
    	system("pause");
    	return(0);
    
    
    }
    
  • Re: Socket

    Che ne dici di mettere i code tags prima? Se non sai cosa sono leggi il regolamento.
  • Re: Socket

    Scusami ma sono nuovo,avevo letto molto velocemente quella parte,scusami,ora va bene?
    CMQ NN RIESCO A TROVARE IL PROBLEMA,IO LO DEVO COMPILARE IN ECLIPSE CON MinGW (GCC),E DEVO AGGIUNGERE LA LIBRERIA WSOCK32,ORA QUANDO LO COMPILO MI DA ERRORE NEL SERVER NELLA PARTE BIND(MY SOCKET...),
  • Re: Socket

    Errore di che tipo?
  • Re: Socket

    IN IF BIND...
    MI DICE Problem description: Symbol 'MySocket' could not be resolved,POI ANCHE SUCCESSIVAMENTE DOVE VIENE CHIAMATO...
  • Re: Socket

    Dopo la compilazione sotto l'eclipse mi viene scritto:
    21:02:28 **** Rebuild of configuration Debug for project 1 ESONERO ****
    Info: Internal Builder is used for build
    gcc -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\client.o" "..\\src\\client.c"
    gcc -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\server.o" "..\\src\\server.c"
    ..\src\server.c: In function 'main':
    ..\src\server.c:53:11: error: 'MySocket' undeclared (first use in this function)
    ..\src\server.c:53:11: note: each undeclared identifier is reported only once for each function it appears in
    ..\src\server.c:54:2: warning: implicit declaration of function 'ErrorHandler' [-Wimplicit-function-declaration]
    ..\src\server.c:71:6: warning: variable 'clientSocket' set but not used [-Wunused-but-set-variable]

    21:02:32 Build Finished (took 3s.503ms)
  • Re: Socket

    C++ è case sensitive
    
    int Mysocket;
    
    MySocket not found. Controlla la 'S'.
  • Re: Socket

    Gli errori sono diminuiti ma mi da ora come errore

    'MySocket' undeclared (first use in this function)
    - each undeclared identifier is reported only once for each function it
    appears in
  • Re: Socket

    Mah di devo fare una domanda che non voglio fare?
    La variabile Mysocket è dichiarata con la 'S' minuscola. Tu la stai usando in tanti posti con la 'S' maiuscola
  • Re: Socket

    Ho fatto altre modifiche e mi da come errore il compilatore

    Info: Internal Builder is used for build
    gcc -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\server.o" "..\\src\\server.c"
    ..\src\server.c: In function 'main':
    ..\src\server.c:54:2: warning: implicit declaration of function 'ErrorHandler' [-Wimplicit-function-declaration]
    ..\src\server.c:78:8: error: 'clientsocket' undeclared (first use in this function)
    ..\src\server.c:78:8: note: each undeclared identifier is reported only once for each function it appears in
    ..\src\server.c:81:16: error: 'Mysocket' undeclared (first use in this function)
    ..\src\server.c:71:6: warning: unused variable 'clientSocket' [-Wunused-variable]

    21:20:19 Build Finished (took 783ms)


    piu precisamente ne file sorgente l'elclipse mi dice



    1)Multiple markers at this line
    - each undeclared identifier is reported only once for each function it
    appears in
    2)Mysocket' undeclared (first use in this function)

    3)unused variable 'clientSocket' [-Wunused-variable]

    4)implicit declaration of function 'ErrorHandler' [-Wimplicit-function-declaration]




    io ora ho scritto tutto in piccolo cioe Mysocket
  • Re: Socket

    Salve,ora mi da dei nuovi errori,
    me li da su void ClearWinSock(),e sul main,dicendo che è stato dichiarato prima nel server,e nel client mi dice multipla dichiarazione???
  • Re: Socket

    Chi mi riesce a correggere quel codice che ho fatto,è molto importante,devo consegnare un esonero entro domani tramite email,ed mi manca la connessione tra client e server,poiche poi ho creato separatamente quasi tutte le funzioni da aggiungerci dopo la connessione....grazie mille
Devi accedere o registrarti per scrivere nel forum
12 risposte