Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    7

    Problema client server

    ciao a tutti

    sto scrivendo un client e un server in C che dovrebbero connettersi tra loro su un'unica macchina... su piattaforma window..
    lo sto scrivendo su notepad++ e lo sto compilando con gcc... quando lo compilo mi da undefined reference to su varie funzioni tra cui send recv closesocket... ho capito che molto probabilmente è un problema di librerie...
    qualcuno potrebbe darmi un indizio?? come posso risolvere??

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Non sappiamo che errori hai, non sappiamo che librerie stai usando... Come facciamo a darti una mano?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non sappiamo neanche se hai usato gli include necessari perché non hai neanche mostrato un briciolo di codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    7

    E' un pò lungo

    il server...
    codice:
    #pragma comment (lib, "Ws2_32.lib")
    #include<Windows.h>
    #include<stdio.h>
    #include<winSock2.h>
    #include<stdlib.h>
    #include <pthread.h>
    
    #define LMITT 30
    #define LOGG 150
    #define LTEXT 500
    #define PORTA 1101
    #define LBUFF 10
    #define LMAX (LMITT+LOGG+LTEXT)
    #define FILENAME "bacheca.txt"
    typedef struct {
    
    	char mittente[LMITT];
    	char oggetto[LOGG];
    	char testo[LTEXT];
    	int numeroMessaggio;
    	
    	} Messaggio;
    	
    //VARIABILI GLOBALI
    SOCKET socket_server;
    SOCKET connessione;
    Messaggio messaggio;
    int codiceAzione;
    int flag=0; //DA VERIFICARE!!!
    HANDLE bacheca;
    DWORD tid;
    FILE fileAppoggio;
    int contatoreMessaggi=1;
    HANDLE thred_lavoratore;
    char nome[]="Bacheca_Elettronica";
    WNDCLASS parametriFinestra;
    char* mesSospensione="...Sospensione...";
    UINT mex_type_sosp=0;
    HWND titolo;
    
    
    LRESULT CALLBACK WndProc(HWND hWindow, UINT message, WPARAM wParam, LPARAM lParam) {
    
    	switch(message) {
    		
    		case WM_CREATE:
    			return 0;
    	
    		default:
    			if(message==mex_type_sosp) {
    			
    				printf("...impossibile comunicare con il client... \n");
    				flag=1;
    				closesocket(socket_server); //VERIFICARE SE FUNZIONA CON SOCKET_SERVER
    				ExitThread(0);
    				}
    			else 
    				return(DefWindowProc(hWindow,message,wParam,lParam));
    	}
    }
    
    void gestioneFinestre() {
    
    	//nuovo tipo di messaggio evento
    	mex_type_sosp=RegisterWindowsMessage((LPCSTR)mesSospensione);
    	if(!mex_type_sosp) {
    	
    		printf("ATTENZIONE: errore nella creazione del messaggio --> Server",GetLastError());
    		fflush(stdout);
    		ExitProcess(-1);
    	}
    	
    	//settiamo i parametri della finestra
    	parametriFinestra.style=CS_HREDRAW|CS_VREDRAW;
    	parametriFinestra.lpfnWndProc=WndProc;
    	parametriFinestra.cbClsExtra=0;
    	parametriFinestra.cbWndExtra=0;
    	parametriFinestra.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    	parametriFinestra.hInstance=NULL;
    	parametriFinestra.hCursor=LoadIcon(NULL,IDC_ARROW);
    	parametriFinestra.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    	parametriFinestra.lpszClassName=(LPCSTR)nome;
    	parametriFinestra.lpszMenuName=NULL;
    	
    	//creo un evento
    	if(!RegisterClass(&parametriFinestra)) {
    	
    		printf("\n ATTENZIONE: errore nella creazione dell'evento --> Server \n");
    		fflush(stdout);
    		}
    		
    	//creo la finestra
    	titolo=CreateWindow((LPCSTR)nome, 
    									(LPCSTR)"Bacheca Elettronica", 
    									WS_OVERLAPPEDWINDOW, 
    									CW_USEDEFAULT, 
    									CW_USEDEFAULT, 
    									CW_USEDEFAULT, 
    									CW_USEDEFAULT, 
    									NULL, NULL, NULL, NULL);
    	
    	if(titolo==INVALID_HANDLE_VALUE) {
    		
    		printf("\n ATTENZIONE: errore nella creazione della finestra --> Server \n", GetLastError());
    		fflush(stdout);
    		ExitProcess(-1);
    		}
    }
    
    void letturaMessaggi(SOCKET connessione, HANDLE bacheca) {  //VERIFICARE --> AL POSTO DI DS_SOCKET POTREBBE ANDARCI LA SOCKET VERA E PROPRIA!!
    	
    	//VARIABILI LOCALI AL METODO
    	int dim_file;
    	char dimensione[LBUFF];
    	int contatore=0;
    	char dati[LMAX];
    	DWORD datiLetti=0;
    	
    	printf("\n ...lettura messaggi in corso... \n");
    	
    	if((dim_file=SetFilePointer(bacheca,0,0,FILE_END))==INVALID_SET_FILE_POINTER) {	//ACQUISISCO LA DIMENSIONE DEL FILE DA INVIARE AL CLIENT
    		
    		printf("\n ATTENZIONE: non si può determinare la dimensione del file! \n");
    		}
    		
    	itoa(dim_file,dimensione,15); //converte dimensione_file in una stringa dimensione per poterla inviare al server
    	
    	if(write(connessione,dimensione,sizeof(dimensione),0)<0) {
    	
    		printf("\n ATTENZIONE: errore nell'invio dimensione del file \n");
    		flag=0;
    		//PostMessage(hWindow,mex_type_sosp,0,0);
    		ExitThread(-1);
    		}
    		
    	//LEGGIAMO IL FILE DA INVIARE AL CLIENT
    	if(SetFilePointer(bacheca,0,0,FILE_BEGIN)==INVALID_SET_FILE_POINTER) printf("\n ATTENZIONE: errore nel riposizionamento del file pointer \n");
    	
    	while(contatore<dim_file) {
    	
    		memset(&dati,0,sizeof(dati));
    	
    		if(ReadFile(bacheca,&dati,LMAX,&datiLetti,0)==0) printf("\n ATTENZIONE: errore nella lettura del file \n");
    		
    		printf("\n ...invio dati in corso... \n");
    		
    		int invio=write(connessione,dati,sizeof(dati),0);
    		
    		if(invio<0) {
    		
    			printf("\n ATTENZIONE: errore nell'invio dei dati al client \n");
    			flag=0; //DA VERIFICARE
    			//PostMessage(hWindow,mex_type_sosp,0,0);
    			ExitThread(-1);
    			
    			}
    			
    		contatore=SetFilePointer(bacheca,0,0,FILE_CURRENT); //RIPOSIZIONA IL FILE POINTER DAL PUNTO IN CUI ERA ARRIVATO
    		
    		if(contatore==INVALID_SET_FILE_POINTER) printf("\n ATTENZIONE: errore nel riposizionamento del file_pointer \n");
    	} //FINE DEL FILE
    	
    	printf("\n BACHECA INVIATA CORRETTAMENTE AL CLIENT \n");
    }
    
    DWORD WINAPI lavoro(void* no_value) {
    
    	//VARIABILI LOCALI AL METODO
    	
    	
    	//INIZIALIZZAZIONE VARIABILI LOCALI
    	
    	
    	//IDENTIFICHIAMO L'UTENTE
    	
    	memset(&messaggio.mittente,0,sizeof(messaggio.mittente));
    	
    	if(read(connessione,messaggio.mittente,sizeof(messaggio.mittente),0)<0) {
    	
    		printf("\n ATTENZIONE: errore nella ricezione del mittente \n");
    		flag=0; //VERIFICARE A COSA SERVE!!!!!
    		ExitThread(1);
    		}
    		
    	else {
    	
    		printf("MITTENTE: \n");
    		printf("%s\n",&messaggio.mittente);
    		}
    		
    	//RICEVIAMO LA RICHIESTA FATTA AL SERVER
    	
    	while(1) {
    	
    		if(read(connessione,messaggio.mittente,sizeof(codiceAzione),0)<0) {
    		
    			printf("\n ATTENZIONE: la richiesta non è stata ricevuta \n");
    			flag=1; //VERIFICARE
    			ExitThread(1);
    		}
    		
    		else {
    		
    			printf("\n La richiesta ricevuta è: \n");
    			printf("%s\n", &codiceAzione);
    		}
    		
    		
    		switch(codiceAzione) {
    	
    		case '1':
    		
    			 letturaMessaggi(connessione,bacheca);
    			
    		case '2':
    		
    			 scritturaMessaggi(connessione,bacheca);
    	
    		case '3':
    		
    			 cancellazioneMessaggi(connessione,bacheca);
    		
    		case '4':
    		
    			 printf("\n SESSIONE CHIUSA \n");
    			 
    			 if(closesocket(connessione)==SOCKET_ERROR) {
    			 
    				printf("\n ATTENZIONE: errore nella chiusura della socket \n");
    				flag=1;
    				ExitThread(0);
    			}
    			
    		}
    	}
    }
    
    int Init_WinSocket(void) {
    
    	WSADATA data; //contiene le primitive di winSock
    	WORD w;
    	int err=0; //gestisce gli errori
    	
    	w=MAKEWORD(2,2); //la variabile w contiene la versione della wsock32.dll
    	err=WSAStartup(w,&data); //inizializzo la wspck32.dll verificando la mancanza di errori
    	
    	if(err!=0) {
    	
    		printf("WSAStartup fallito \n");
    		
    		return 0;
    		}
    	
    	return 1;
    	
    }
    
    int main() {
    	
    	//VARIABILI LOCALI AL MAIN
    	HANDLE thread_lavoratore;
    	int stato_thread;
    
    	struct sockaddr_in server;
    	struct sockaddr_in client;
    	
    	int descrittore_server;
    	int descrittore_client;
    	
    	//GESTIAMO LA CONNESSIONE DEL SOCKET DEL SERVER
    	memset(&server,0,sizeof(server));
    	
    	printf("\n ...inizializzazione server... \n");
    	
    	server.sin_family=AF_INET;
    	server.sin_port=htons(PORTA);
    	server.sin_addr.s_addr=htonl(INADDR_ANY); //INADDR_ANY SPECIFICA CHE POSSO RICEVERE CONNESSIONI DA QUALSIASI INDIRIZZO
    	
    	if(!Init_WinSocket())
    		exitWSA(1);
    	
    	if((descrittore_server=socket(AF_INET, SOCK_STREAM,0))<0) {
    	
    		printf("\n ATTENZIONE: errore nella creazione della socket --> Server \n");
    		exit(-1);
    	
    		}
    		
    	//FACCIAMO LA BIND!!
    	//ASSOCIA INDIRIZZO ALLA SOCKET
    	int esito_bind=bind(socket_server, (struct sockaddr *)&server, sizeof(server)); 
    	if(esito_bind<0) {
    	
    		printf("\n ATTENZIONE: c'è stato un errore nella bind --> Server \n");
    		exit(-1);
    	
    		}
    	
    	//METTIAMO IL SERVER IN ASCOLTO DI RICHIESTE DA PARTE DEL CLIENT
    	if(listen(socket_server,1)==SOCKET_ERROR) {
    	
    		printf("\n ATTENZIONE: errore nella funzione listen --> Server \n");
    		exitProcess(0);
    		
    		}
    	
    	int LClient = sizeof(client);
    	while(1) {
    		
    		printf("\n ...accettazione del client... \n");
    		connessione=accept(socket_server, (struct sockaddr *)&client, &LClient);
    		if(descrittore_client<0) {
    		
    			if(errno!=EINTR) {
    				printf("\n ATTENZIONE: errore accept --> Server \n");
    				exit(-1);
    			}
    		}
    		
    		else {
    			
    			void *desc = (void *) &descrittore_client;
    			//ATTIVIAMO IL THREAD CHE FARà IL LAVORO DEL SERVER
    			
    			if((thread_lavoratore=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)lavoro,NULL,NORMAL_PRIORITY_CLASS,&tid))==INVALID_HANDLE_VALUE) {
    			
    				printf("\n ATTENZIONE: errore nella creazione del thread --> Server \n");
    				ExitProcess(0);
    			}
    			
    			
    		}
    	}
    }
    e gli errori che mi da...

    codice:
    C:\Users\Admin\Desktop\BachecaElettronica\Server>gcc server.c
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0x3e): undefined re
    ference to `closesocket@4'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0x87): undefined re
    ference to `RegisterWindowsMessage'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0x13c): undefined r
    eference to `GetStockObject@4'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0x9f8): undefined r
    eference to `closesocket@4'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xa57): undefined r
    eference to `WSAStartup@8'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xac5): undefined r
    eference to `htons@4'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xad8): undefined r
    eference to `htonl@4'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xaf3): undefined r
    eference to `exitWSA'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xb0f): undefined r
    eference to `socket@12'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xb4f): undefined r
    eference to `bind@12'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xb88): undefined r
    eference to `listen@8'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xba8): undefined r
    eference to `exitProcess'
    C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xbd9): undefined r
    eference to `accept@12'
    collect2: ld returned 1 exit status
    
    C:\Users\Admin\Desktop\BachecaElettronica\Server>
    e questi sono gli errori che mi da...
    sono disperata!!!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Questa linea

    #pragma comment (lib, "Ws2_32.lib")

    è utilizzabile solo se utilizzi con il Visual C++ di Microsoft (cosa che indica che questa parte di codice non è l'hai scritto tu per il gcc ...). Ed è la linea che serve per linkare la libreria che ti dà la maggior parte dei problemi.

    Probabilmente con gcc dovrai scrivere alla fine della linea di comando

    gcc ..... -lws2_32

    e poi vediamo se e quali altri errori avrai ancora.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6

    Moderazione

    Benvenuto sul forum! Ti ricordo che:
    • il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione;
    • il linguaggio di riferimento va sempre specificato (anche nel titolo, sotto forma di "tag").


    Ora correggo io, in futuro imposta correttamente la discussione fin da subito; nel frattempo ti consiglio di dare un'occhiata al regolamento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    7

    [C]Adesso ho un problema con il client

    Ok grazie mille...

    ora il server compila, ma ho un problema con il client... ve lo posto

    codice:
     
    
    #include<windows.h>
    #include<stdio.h>
    #include<WinSock2.h>
    
    #include<stdlib.h>
    #include <pthread.h>
    #include<wingdi.h>
    
    #include<sys/types.h>
    #include<errno.h>
    #include<io.h>
    #include<winuser.h>
    
    
    
    
    
    
    #define LMITT 30
    #define LOGG 150
    #define LTEXT 500
    #define PORTA 1101
    #define LHOSTBUFF 1024
    
    
    typedef struct {
    
    	char mittente[LMITT];
    	char oggetto[LOGG];
    	char testo[LTEXT];
    	int numeroMessaggio;
    	
    	} Messaggio;
    	
    	
    	//VARIABILI GLOBALI
    	UINT mex_type_sosp=0;
    	char buffer[709];
    	Messaggio messaggio;
    	
    	HWND titolo;
    	WNDCLASS parametriFinestra;
    	char* mesSospensione="...Sospensione...";
    	
    void exitWSA(int errorcode) {
    
    	WSACleanup();
    	exit(errorcode);
    	}
    
    LRESULT CALLBACK WndProc(HWND hWindow, UINT message, WPARAM wParam, LPARAM lParam) {
    
    	switch(message) {
    		
    		case WM_CREATE:
    			return 0;
    		
    		case WM_CLOSE:
    			return 0;
    			
    		default:
    			if(message==mex_type_sosp) {
    			
    				printf("...sospendi connessioni... \n");
    				fflush(stdout);
    				exitWSA(1);
    				PostQuitMessage(0);
    				return 0;
    				}
    			else 
    				return(DefWindowProc(hWindow,message,wParam,lParam));
    	}
    }
    	
    void gestioneFinestre() {
    
    	//typedef struct tagWNDCLASS {
    		//UINT      style;
    		//WNDPROC   lpfnWndProc;
    		//int       cbClsExtra;
    		//int       cbWndExtra;
    		//HINSTANCE hInstance;
    		//HICON     hIcon;
    		//HCURSOR   hCursor;
    		//HBRUSH    hbrBackground;
    		//LPCTSTR   lpszMenuName;
    		//LPCTSTR   lpszClassName;
    		//} WNDCLASS, *PWNDCLASS;
    
    	
    	char nome[]="Bacheca_Elettronica";
    	
    	//nuovo tipo di messaggio evento
    	mex_type_sosp=RegisterWindowMessage((LPCSTR)mesSospensione);
    	if(!mex_type_sosp) {
    	
    		printf("ATTENZIONE: errore nella creazione del messaggio --> Client",GetLastError());
    		fflush(stdout);
    	}
    	
    
    	
    	//settiamo i parametri della finestra
    	parametriFinestra.style=CS_HREDRAW|CS_VREDRAW;
    	parametriFinestra.lpfnWndProc=WndProc;
    	parametriFinestra.cbClsExtra=0;
    	parametriFinestra.cbWndExtra=0;
    	parametriFinestra.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    	parametriFinestra.hInstance=NULL;
    	parametriFinestra.hCursor=LoadIcon(NULL,IDC_ARROW);
    	parametriFinestra.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    	parametriFinestra.lpszClassName=(LPCSTR)nome;
    	parametriFinestra.lpszMenuName=NULL;
    	
    	//creo un evento
    	if(RegisterClass(&parametriFinestra)==0) {
    	
    		printf("\n ATTENZIONE: errore nella creazione dell'evento --> Client \n");
    		fflush(stdout);
    		}
    		
    	//creo la finestra
    	titolo=CreateWindow((LPCSTR)nome, 
    									(LPCSTR)nome, 
    									WS_OVERLAPPEDWINDOW, 
    									CW_USEDEFAULT, 
    									CW_USEDEFAULT, 
    									CW_USEDEFAULT, 
    									CW_USEDEFAULT, 
    									NULL, NULL, NULL, NULL);
    	
    	if(titolo==INVALID_HANDLE_VALUE) {
    		
    		printf("\n ATTENZIONE: errore nella creazione della finestra \n", GetLastError());
    		fflush(stdout);
    		ExitProcess(-1);
    		}
    }
    	
    
    int Init_WinSocket(void) {
    
    	WSADATA data; //contiene le primitive di winSock
    	WORD w;
    	int err=0; //gestisce gli errori
    	
    	w=MAKEWORD(2,2); //la variabile w contiene la versione della wsock32.dll
    	err=WSAStartup(w,&data); //inizializzo la wspck32.dll verificando la mancanza di errori
    	
    	if(err!=0) {
    	
    		printf("WSAStartup fallito \n");
    		
    		return 0;
    		}
    	
    	return 1;
    	
    }
    
    int main() {
    
    	//DATI
    	
    	int codiceAzione;
    	
    	char buffer[800];
    	
    	
    	//GESTIAMO LA CREAZIONE E LA CONNESSIONE DELLA SOCKET
    	
    	SOCKET socketClient;
    	
    	struct sockaddr_in server_addr;
    	struct hostent* host;
    	
    	server_addr.sin_family=PF_INET;
    	server_addr.sin_port=htons(PORTA); //PORTA UTILIZZATA PER LA CONNESSIONE DELLA SOCKET
    	//host=traduciHost("localhost");
    	server_addr.sin_addr.S_un.S_un_b.s_b1=127;
    	server_addr.sin_addr.S_un.S_un_b.s_b2=0;
    	server_addr.sin_addr.S_un.S_un_b.s_b3=0;
    	server_addr.sin_addr.S_un.S_un_b.s_b4=1;
    	
    	if(!Init_WinSocket())
    		exitWSA(1);
    	
    	
    	
    	//LA SOCKET SI CONNETTE TRAMITE CONNESSIONE TCP(SOCK_STREAM) E PROTOCOLLO TCP/IP (PF_INET)
    	if((socketClient=socket(PF_INET,SOCK_STREAM,0))<0) {
    	
    		printf("Errore nella creazione della socket del client");
    		ExitProcess(-1); //CHIAMATA DI WIN32 CHE TERMINA NORMALMENTE IL PROCESSO
    	}
    	
    	//PREPARIAMO LO SPAZIO DI MEMORIA CHE CONTERRà IL NOSTRO INDIRIZZO
    	
    	printf("\n ...connessione al server in corso... \n");
    	
    	if(connect(socketClient,(struct sockaddr*)&server_addr,sizeof(struct sockaddr))==SOCKET_ERROR) {
    	
    		printf("Errore nella connessione\n");
    		SendMessage(HWND_BROADCAST,mex_type_sosp,0,0);
    		ExitProcess(0);
    	}
    	else {
    	
    		printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    		printf("\n~~~~~~~~~~CONNESSI AL SERVER~~~~~~~~~~~~~\n");
    		printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    	}
    	
    	gestioneFinestre();
    	
    	//PREPARO LO SPAZIO DI MEMORIA PER MEMORIZZARE IL MITTENTE
    	memset(&messaggio.mittente,'\0',sizeof(messaggio.mittente));
    	
    	printf("Inserisci username");
    	
    	while(1){
    	
    		gets(messaggio.mittente); //CATTURA USERNAME DA CANALE DI INPUT STANDARD (TASTIERA)
    		
    		if(strlen(messaggio.mittente)<=32) break;
    		printf("Inserisci username più breve");
    	}
    	
    	printf("\n ...login in corso... \n");
    	
    	if(send(socketClient, messaggio.mittente,strlen(messaggio.mittente),0)<0) {
    	
    		printf("\n login non riuscito \n");
    		SendMessage(HWND_BROADCAST,mex_type_sosp,0,0);
    		ExitProcess(0);
    	}
    	
    	printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    	printf("\n~~~~~~~~~~~~LOGIN RIUSCITO~~~~~~~~~~~~~~~\n");
    	printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    	
    	printf("\nINSERISCI IL CODICE CORRISPONDENTE A CIò CHE VUOI FARE\n");
    	printf("\n               Leggere   ----> 1                     \n");
    	printf("\n               Scrivere  ----> 2                     \n");
    	printf("\n              Cancellare ----> 3                     \n");
    	printf("\n                Uscire   ----> 4                     \n");
    	
    	memset(&codiceAzione,'0',sizeof(codiceAzione));
    	scanf("%s",&codiceAzione); 
    	fflush(stdin); //SU UNO STREAM DI INPUT TORNA EOF IN CASO DI ERRORE DI SCRITTURA, 0 ALTRIMENTI
    	
    	switch(codiceAzione) {
    	
    		case '1':
    		
    			if(send(socketClient,"01",(strlen("01")+1),0)<0) {
    			
    				printf("Errore invio codice\n");
    				SendMessage(HWND_BROADCAST,mex_type_sosp,0,0);
    				ExitProcess(0);
    			}
    			else letturaMessaggi(socketClient);
    			
    		case '2':
    		
    			if(send(socketClient,"02",(strlen("02")+1),0)<0) {
    			
    				printf("Errore invio codice\n");
    				SendMessage(HWND_BROADCAST,mex_type_sosp,0,0);
    				ExitProcess(0);
    			}
    			else scritturaMessaggi(socketClient);
    	
    		case '3':
    		
    			if(send(socketClient,"03",(strlen("03")+1),0)<0) {
    			
    				printf("Errore invio codice\n");
    				SendMessage(HWND_BROADCAST,mex_type_sosp,0,0);
    				ExitProcess(0);
    			}
    			else cancellazioneMessaggi(socketClient);
    		
    		case '4':
    		
    			if(send(socketClient,"04",(strlen("04")+1),0)<0) {
    			
    				printf("Errore invio codice\n");
    				SendMessage(HWND_BROADCAST,mex_type_sosp,0,0);
    				ExitProcess(0);
    			}
    			else {
    			
    				closeSocket(socketClient);
    				printf("\n~~~~~~~~~~~~~~SESSIONE CHIUSA~~~~~~~~~~~~~~~\n");
    				exitWSA(0);
    			}
    		}
    	} //CHIUSURA MAIN
    e l'errore che mi da è undefined function to WinMain@16

    ma nn capisco...il main c'è!!!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Hai fatto un po' di confusione tra i tipi di progetti ...

    La main() è usata per i progetti Console non per quelli con finestra ... come hai detto che compili ? Cosa usi ? Quale progetto hai creato all'avvio ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    7

    [C] problema winMain

    Ciao...scusate x il ritardo nella risposta...
    allora io uso notepad++ per scrivere il programma e poi compilo ed eseguo da prompt dei comandi con gcc... in cosa consistono le differenze?? cosa devo modificare??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.