#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[11];
char B[101];
char user[] = "Alessandra,Raffoni,0000240469";
char buf[100];
char msg[100];
int port, len, nread, nwrite, n, sd, i, N.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((u_short)atoi(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);
/* Punto 4.*/
strcat(A, user);
len = strlen(A);
strcpy(B, A);
strcat(B,user);
len = strlen(B);
for (i = len; i < 11; i++) {
B = ' ';}len = strlen(argv[3]) + 1;
nwrite = 0;
while ((n = write(sd, &(msg[nwrite]), len - nwrite)) > 0)
nwrite += n;
B[100] = '\0';
/* Punto 5.*/
byte_msg N;len = strlen(argv[3]);write(sd, &len, sizeof(int));
N.value = strlen(argv[3]);
write(sd, N.value, sizeof(4);
N.value = value;
printf("value = %s\n", N.value);
N = strlen(msg);
/* Punto 6. */
len = strlen(argv[3]);
nwrite = 0;
while ((n = write(sd, &(argv[3][nwrite]), len - nwrite)) > 0)
nwrite += n;
/* Punto 7. */
while ((len>nread) && ((n = read(sd, &(ris[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