questo è il codice che ho generato, decisamente diverso dallo schema indicato prima:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#define SERVER_IP "192.168.2.1" // IP del server
#define PORTA1 27789 // Porta del server VRF_RX
#define PORTA2 27898 // Porta del server VRF_TX
#define MAXNUM 256 // Massimo numero di caratteri ricevibili
void addr_initialize (struct sockaddr_in *pt, unsigned int TCP_port, unsigned int IP_addr) {
pt -> sin_family = AF_INET;
pt -> sin_port = htons ((unsigned short int) TCP_port);
pt -> sin_addr.s_addr = IP_addr;
}
int main()
{
int sd1, sd2;
struct sockaddr_in s1_addr;
struct sockaddr_in s2_addr;
int s1_len=sizeof(s1_addr);
int s2_len=sizeof(s2_addr);
int err1, err2, error, error1;
char quit[5]"quit\n";
char errore[5];
char ch='\n';
int len;
char seq[5];
int i,j,term;
char msg[256];
error=0;
error1=0;
sd1=socket(AF_INET, SOCK_STREAM, 0);
sd2=socket(AF_INET, SOCK_STREAM, 0);
addr_init(&s1_addr, PORT1, inet_addr(SERVER_IP));
addr_init(&s2_addr, PORT2, inet_addr(SERVER_IP));
do {
i=0;
term=0;
err1 = connect(sd1, (struct sockaddr*)&s1_addr, s1_len); /*ripetere con 2 al posto di 1*/
if(err1!=0) {
printf("\nConnessione fallita: termino per errore");
exit(-1);
}
err2 = connect(sd2, (struct sockaddr*)&s2_addr, s2_len);
if(err2!=0) {
printf("\nConnessione fallita: termino per errore");
exit(-1);
}
sprintf(errore, "%d\n", error);
send (sd2, errore, strlen(errore),0);
while (seq[i-1] != ch) {
recv(sd1, &seq[i],1,0);
i++;
}
seq[i-1]='\0';
len = atoi(seq);
for(j=0;j<len;j++) {
recv (sd1, &msg[j],1,0);
byte = send (sd2, &msg[j],1,MSG_NOSIGNAL);
if(byte == -1) error1++;
}
if(error1 > error){
error=error1;
close(sd1);
close(sd2);
continue;
}
send(sd2, &ch,1,0);
for(i=0; i<5;i++){
if(msg[i]==quit[i]) term=1;
}
close(sd1);
close(sd2);
}while(term!=1);
return 0;
}
che ne dite? funziona? Ci sono errori rilevanti o cose non corrette?
Grazie ancora una volta!