Ho fatto un client in c in ssh kn il seguente 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[10];
char B[100];
char user[] = "Alessandra,Raffoni,0000240469";
char buf[100];
char msg[120];
int port, len, nread, nwrite, n, sd, i, value;
char h, N_value, N;
char* servizio;
typedef union {
int value;
char N_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/host\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);
len = strlen(A);
strcpy(B, A);
len = strlen(B);
for (i = len; i < 100; i++) {
B = ' ';
}
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);
/* 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
ma mi da i seguenti errori che non dovrebbe darmi:
progClient.c:46: error: dereferencing pointer to incomplete type
progClient.c:90: error: incompatible types in assignment
Se qualcuno mi sa aiutare gli sarò infinitamente grato!!
Grazie a tutti!
#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[10];
char B[100];
char user[] = "Alessandra,Raffoni,0000240469";
char buf[100];
char msg[120];
int port, len, nread, nwrite, n, sd, i, value;
char h, N_value, N;
char* servizio;
typedef union {
int value;
char N_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/host\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);
len = strlen(A);
strcpy(B, A);
len = strlen(B);
for (i = len; i < 100; i++) {
B = ' ';
}
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);
/* 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
ma mi da i seguenti errori che non dovrebbe darmi:
progClient.c:46: error: dereferencing pointer to incomplete type
progClient.c:90: error: incompatible types in assignment
Se qualcuno mi sa aiutare gli sarò infinitamente grato!!
Grazie a tutti!