Socket

di Anonimizzato11457 il
12 risposte
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

  • 
    //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);
    
    
    }
    
  • Che ne dici di mettere i code tags prima? Se non sai cosa sono leggi il regolamento.
  • 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...),
  • Errore di che tipo?
  • IN IF BIND...
    MI DICE Problem description: Symbol 'MySocket' could not be resolved,POI ANCHE SUCCESSIVAMENTE DOVE VIENE CHIAMATO...
  • 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)
  • C++ è case sensitive
    
    int Mysocket;
    
    MySocket not found. Controlla la 'S'.
  • 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
  • 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
  • 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
  • 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???
  • 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