Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ho fatto un client e un server che mi danno i seguenti errori:
error LNK2019: riferimento al simbolo esterno _WSACleanup@0 non risolto nella funzione _main c:\Users\...
error LNK2019: riferimento al simbolo esterno _recv@16 non risolto nella funzione _main c:\Users\................\documents\visual studio 2010\Projects\Client\Client\Client.obj
sono 10 e si riferiscono a connect,inet addr htons ecc.
Ho guardato sul web, ho trovato che è un errore del linker, ma non so risolvere.
Questo è il client:
int main(int argc, char *argv[]) {
printf("Avvio client in corso...\n");
WSADATA wsaData;
u_long nRemoteAddr;
char *szAddress; /* Holds remote IP address */
struct sockaddr_in target;
struct sockaddr_in accepted;
struct hostent *hp;
int acceptedLen; // accept scriverà la propria taglia
char buffer[MAX_LINE]; /* character buffer */
if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) { // Affinchè, windows utilizzi i socket devo mandare in startup il layer dei socket
printf("errore in WSAStartup()\n");
exit(EXIT_FAILURE);
}
/* Creo il socket */
SOCKET sock;
SOCKET newSock;
printf("\nCreazione socket in corso...");
sock=socket(AF_INET, SOCK_STREAM, 0);
nRemoteAddr = inet_addr(szAddress);
if (nRemoteAddr == INADDR_NONE)
{
printf("client: indirizzo IP non valido.\nclient: risoluzione nome...");
if ( (hp=gethostbyname(szAddress)) == 0)
{
printf("fallita.\n");
exit(EXIT_FAILURE);
}
printf("riuscita.\n\n");
nRemoteAddr = *((u_long *)hp->h_addr_list[0]);
}
target.sin_addr.s_addr = nRemoteAddr;
/* Connessione */
if ( connect(sock, (struct sockaddr *) &target, sizeof(target) ) == SOCKET_ERROR )
{
printf("client: errore durante la connect.\n");
exit(EXIT_FAILURE);
}
/* Comunicazione */
printf("Inserire la stringa da spedire: ");
do {
scanf("%s",buffer);
send(sock,buffer,strlen(buffer),0);
} while (strcmp(buffer,"quit")!=0);
recv(sock,buffer,MAX_LINE-1,0);
printf("Risposta del server: %s\n",buffer);
WSACleanup();
return EXIT_SUCCESS;
}
()
Newbie
Messaggi: Iscritto:
Postato alle 17:35
Venerdì, 22/02/2013
Devi assicurarti che le librerie che ti servono siano linkate, contralle quali librerie ti servono ed aggiungile (opzioni->progetto->C/C++->Linker) o qualcosa del genere.
In quel modo ho risolto tutti gli errori tranne uno, questo(Sul server):
error LNK2019: riferimento al simbolo esterno _main non risolto nella funzione ___tmainCRTStartup C:\Users\...........\Documents\Visual Studio 2010\Projects\Server\Server\MSVCRTD.lib(crtexe.obj)
void startServer(char** argv){
#pragma comment(lib, "ws2_32.lib") // Risolve problemi con il Linker tipo LNK2019.
printf("Avvio server in corso...\n");
WSADATA wsaData;
struct sockaddr_in target;
struct sockaddr_in accepted;
int acceptedLen; // accept scriverà la propria taglia
char buffer[MAX_LINE]; /* character buffer */
if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) { // Affinchè, windows utilizzi i socket devo mandare in startup il layer dei socket
printf("errore in WSAStartup()\n");
exit(EXIT_FAILURE);
}
/* Stabilisco l'indirizzo IP del server secondo argomento da linea di comando, il protocollo utilizzato e il port number (terzo argomento da linea di comando*/
memset(&target, 0, sizeof(target));
target.sin_family = AF_INET;
target.sin_port = htons(1999); // l'argomento di htons deve essere un intero, uso atoi che converte da stringa a intero;
target.sin_addr.s_addr = htonl(INADDR_ANY); //argv[2] è la porta; htons converte il numero di porta voluto, perchè i valori utilizzati
//da internet sono diversi da quelli del pc.
/* Effettuo il bind */
printf("\nBind in corso...");
if(bind(sock,(struct sockaddr *)&target, sizeof(target))==-1){
printf("Errore nel bind");
}
/* Mi metto in ascolto */
if(listen(sock,LISTENQ) ==SOCKET_ERROR) { // listenq sono il numero di connessioni sospese
printf("server: Errore durante la listen");
exit(EXIT_FAILURE);
}
/* Creo un nuovo socket per la connessione del singolo client */
while(1) {
printf("\nSono in attesa di una connessione...\n");
if((newSock = accept(sock, (struct sockaddr *) &accepted, &acceptedLen))!=-1){ // accept = attesa dionnessione
printf("\nErrore: Impossibile creare un nuovo socket!\nConnessione fallita\n");
}
/* Primo contatto con il client */
printf("server: connessione da %s:%d\n", inet_ntoa(accepted.sin_addr),accepted.sin_port);
do {
recv(newSock, buffer, MAX_LINE-1,0);
printf("Messaggio del client=%s\n",buffer);
} while (strcmp(buffer,"quit")!=0);
send(newSock, "letto", strlen(buffer),0);
exit(0);
}
/* Close the connected socket */
if ( closesocket(newSock) == SOCKET_ERROR )
{
fprintf(stderr, "server: errore durante la close.\n");
exit(EXIT_FAILURE);
}
if ( closesocket(sock) == SOCKET_ERROR )
{
fprintf(stderr, "server: errore durante la close.\n");
exit(EXIT_FAILURE);
}
WSACleanup();
ho risolto grazie.
Sul client mi da questo output, cosa significa?
'Client.exe': caricato 'C:\Windows\SysWOW64\ntdll.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\kernel32.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\KernelBase.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\ws2_32.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\msvcr100d.dll', Simboli caricati.
'Client.exe': caricato 'C:\Windows\SysWOW64\rpcrt4.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\nsi.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\sspicli.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\cryptbase.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\sechost.dll', Impossibile trovare o aprire il file PDB
'Client.exe': caricato 'C:\Windows\SysWOW64\bcryptprimitives.dll', Impossibile trovare o aprire il file PDB
Il programma '[1264] Client.exe: Nativo' è terminato con il codice 0 (0x0).
()
Newbie
Messaggi: Iscritto:
Postato alle 17:23
Sabato, 23/02/2013
Fai il debug, riga per riga finchè scopri cosa non va