Ecco il codice:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#define SOCKET_ERROR ((int)-1)
char A[100];
char B[100];
char user[] = "Alessandra,Raffoni,0000240469";
char buf[100];
char msg[100];
int port, len, nread, nwrite, n, sd, i, value;
char h;
char* servizio;
typedef union {
int value;
char p_value[4];
} byte_msg;
int main(int argc, char **argv) {
struct hostent* host;
struct sockaddr_in cliaddr, servaddr;
byte_msg N;
char ris[3];
if (argc != 4) {
printf("Error: %s serverAddress serverPort message\n", argv[0]);
exit(1);
}
else {
memset((char *)&servaddr, 0, sizeof(struct sockaddr_in));
servaddr.sin_family = AF_INET;
host = (struct hostent *)gethostbyname(argv[1]);
if (host == NULL) {
printf("%s not found in /etc/hosts\n", argv[1]);
exit(1);
}
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(argv[2]);
servaddr.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr*)host->h_addr)));
sd = socket(AF_INET, SOCK_STREAM, 0);
/* Punto 2. */
if (sd < 0) {
perror("apertura socket");
exit(1);
}
printf("Client: creata la socket sd=%d\n", sd);
if (connect(sd, (struct sockaddr *)&servaddr, sizeof(struct sockaddr)) < 0) {
perror("connect");
exit(-1);
}
printf("Client: connect ok\n");
/* Punto 3.*/
len = 10;
nread = 0;
while ((len > nread) && ((n = read(sd, &(buf[nread]), len - nread)) > 0)) {
nread += n;
printf("readeffettuata, risultato n=%d len=%d nread=%d len-nread=%d\n", n, len, nread, len-nread);
fflush(stdout);}
/* Punto 4.*/
strcat(A, user);
len = strlen(A);
strcpy(B, A);
len = strlen(B);
for (i = len; i < 100; i++) {
B[i] = ' ';}
len = strlen(argv[3]) + 1;
nwrite = 0;
while ((n = write(sd, &(msg[nwrite]), len - nwrite)) > 0)
nwrite += n;
/* Punto 5.*/
len = strlen(argv[3]);
write(sd, &len, sizeof(int));
N.value = value;
printf("value = %s\n", N.value);N = strlen(msg); /* CONTROLLA QUI!!! cosa sarebbe messaggiodiprova? nn è mai inizializzato*/
/* Punto 6. */
len = strlen(msg) + 1;
nwrite = 0;
while ((n = write(sd, &(msg[nwrite]), len - nwrite)) > 0)
nwrite += n;
/* Punto 7. */while ((len>nread) && ((n = read(sd, &(buf[nread]), len - nread)) > 0)) {
nread += n;printf("readeffettuata, risultato n=%d len=%d nread=%d len-nread=%d\n", n, len, nread, len - nread);
fflush(stdout);}
ris[2] = '\0';
/* Punto 8. */
printf("Risultato dal server: ");
printf(ris);
/* Punto 9. */
close(sd);exit(0);
return(0);
}
} //main
Gli errori sn i seguenti:
progClient.c:44: warning: passing argument 1 of 'htons' makes integer from pointer without a cast
progClient.c:45: error: dereferencing pointer to incomplete type
progClient.c:90: error
vorrei mettere in allegato anke il testo ma è tropo grande! provate a capirci di qui!