il codice è di seguito:
quando eseguo il debug mi da l'output postato precedentemente QUI
/* Client.c */
#include <winsock.h>
#include <stdlib.h>
#include <stdio.h>
#define MAX_LINE (1000)
int ParseCmdLine(int argc, char *argv[], char **szAddress, char **szPort);
int main(int argc, char *argv[]) {
#pragma comment(lib, "ws2_32.lib") // Risolve problemi con il Linker tipo LNK2019.
printf("Avvio client in corso...\n");
WSADATA wsaData;
u_long nRemoteAddr;
short int port; /* port number */
char *szAddress; /* Holds remote IP address */
char *szPort; /* Holds remote port */
char *endptr; /* for strtol() */
struct sockaddr_in target;
struct sockaddr_in accepted;
struct hostent *hp;
char buffer[MAX_LINE]; /* character buffer */
hp=NULL;
/* Get command line arguments */
ParseCmdLine(argc, argv, &szAddress, &szPort);/////////////////////////////////////////////////////////// QUI
/* Set the remote port */
port = strtol(szPort, &endptr, 0);
if ( *endptr )
{
printf("client: porta non riconosciuta.\n");
exit(EXIT_FAILURE);
}
if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0)
{
printf("errore in WSAStartup()\n");
exit(EXIT_FAILURE);
}
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);
/* Inizializzo la struttura */
memset(&target, 0, sizeof(target));
target.sin_family = AF_INET;
target.sin_port = htons(port);
/* Set the remote IP address */
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;
}
int ParseCmdLine(int argc, char *argv[], char **szAddress, char **szPort)
{
int n = 1;
while ( n < argc )
{
if ( !strncmp(argv[n], "-a", 2) || !strncmp(argv[n], "-A", 2) )
{
*szAddress = argv[++n];
}
else
if ( !strncmp(argv[n], "-p", 2) || !strncmp(argv[n], "-P", 2) )
{
*szPort = argv[++n];
}
else
if ( !strncmp(argv[n], "-h", 2) || !strncmp(argv[n], "-H", 2) )
{
printf("Sintassi:\n\n");
printf(" client -a (indirizzo server) -p (porta del server) [-h].\n\n");
exit(EXIT_SUCCESS);
}
++n;
}
if (argc==1)
{
printf("Sintassi:\n\n");
printf(" client -a (indirizzo server) -p (porta del server) [-h].\n\n");
exit(EXIT_SUCCESS);
}
return 0;
}
|