Oppure

Loading
20/01/12 21:15
Il_Bomba
Ciao a tutti,

ho un problema con un piccolo programma che ho appena creato con le socket.
Il programma consiste in un terminale che consente di comunicare con un altro computer con messaggi testuali (una cosa tipo telnet per intenderci).
Il problema è che è lentissimo nell'inviare messaggi al computer di destinazione.
All'inizio ho pensato che fosse un problema di connessione dell'adsl, ma facendo le stesse cose con telnet, ho visto che non avevo problemi.
Qualcuno sa a cosa potrebbe essere dovuta questa lentezza?

Vi posto il programma:
#include<stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h>

char mymex[100];
char servmex[256];

void clearbuffers();

int main(){

	int server=0;
	struct sockaddr_in serv_addr;
	int port=0;
	int err=0; 
	char address[16];

	printf("Bomba's socket interface\n");
	printf("IP: ");
	scanf("%s", address);
	printf("Port: ");
	scanf("%i", &port);

	server=socket(AF_INET, SOCK_STREAM, 0);
	serv_addr.sin_family=AF_INET;
	serv_addr.sin_port=htons(port);
	serv_addr.sin_addr.s_addr=inet_addr(address);

	err=connect(server, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

	if (err!=-1){
		printf("Connessione a %s avvenuta senza problemi.\n", address);
		printf("Inizio comunicazione.\n");
	}
	else{
		printf("Errore durante la connessione.\n");
	}

	while (mymex!="q"){
		
		clearbuffers();
		recv(server, servmex, 256, 0);
		printf("%s\n", servmex);
		scanf("%s", mymex);
		send(server, mymex, 100, 0);

	}

	close(server);

	if (err!=-1) printf("Fine comunicazione.");

}

void clearbuffers(){

	int i;

	for (i=0; i<100; i++){
		mymex[i]='Ciao a tutti,


ho un problema con un piccolo programma che ho appena creato con le socket.
Il programma consiste in un terminale che consente di comunicare con un altro computer con messaggi testuali (una cosa tipo telnet per intenderci).
Il problema è che è lentissimo nell'inviare messaggi al computer di destinazione.
All'inizio ho pensato che fosse un problema di connessione dell'adsl, ma facendo le stesse cose con telnet, ho visto che non avevo problemi.
Qualcuno sa a cosa potrebbe essere dovuta questa lentezza?

Vi posto il programma:
#include<stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h>

char mymex[100];
char servmex[256];

void clearbuffers();

int main(){

	int server=0;
	struct sockaddr_in serv_addr;
	int port=0;
	int err=0; 
	char address[16];

	printf("Bomba's socket interface\n");
	printf("IP: ");
	scanf("%s", address);
	printf("Port: ");
	scanf("%i", &port);

	server=socket(AF_INET, SOCK_STREAM, 0);
	serv_addr.sin_family=AF_INET;
	serv_addr.sin_port=htons(port);
	serv_addr.sin_addr.s_addr=inet_addr(address);

	err=connect(server, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

	if (err!=-1){
		printf("Connessione a %s avvenuta senza problemi.\n", address);
		printf("Inizio comunicazione.\n");
	}
	else{
		printf("Errore durante la connessione.\n");
	}

	while (mymex!="q"){
		
		clearbuffers();
		recv(server, servmex, 256, 0);
		printf("%s\n", servmex);
		scanf("%s", mymex);
		send(server, mymex, 100, 0);

	}

	close(server);

	if (err!=-1) printf("Fine comunicazione.");

}

void clearbuffers(){

	int i;

	for (i=0; i<100; i++){
		mymex[i]='{parsed_message}';
	}

	for (i=0; i<256; i++){
		servmex[i]='{parsed_message}';
	}

}


P.S: Ho anche provato a togliere la funzione clearbuffers, ma non cambia niente :(

Grazie a tutti quelli che risponderanno.
'; } for (i=0; i<256; i++){ servmex[i]='Ciao a tutti,

ho un problema con un piccolo programma che ho appena creato con le socket.
Il programma consiste in un terminale che consente di comunicare con un altro computer con messaggi testuali (una cosa tipo telnet per intenderci).
Il problema è che è lentissimo nell'inviare messaggi al computer di destinazione.
All'inizio ho pensato che fosse un problema di connessione dell'adsl, ma facendo le stesse cose con telnet, ho visto che non avevo problemi.
Qualcuno sa a cosa potrebbe essere dovuta questa lentezza?

Vi posto il programma:
#include<stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h>

char mymex[100];
char servmex[256];

void clearbuffers();

int main(){

	int server=0;
	struct sockaddr_in serv_addr;
	int port=0;
	int err=0; 
	char address[16];

	printf("Bomba's socket interface\n");
	printf("IP: ");
	scanf("%s", address);
	printf("Port: ");
	scanf("%i", &port);

	server=socket(AF_INET, SOCK_STREAM, 0);
	serv_addr.sin_family=AF_INET;
	serv_addr.sin_port=htons(port);
	serv_addr.sin_addr.s_addr=inet_addr(address);

	err=connect(server, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

	if (err!=-1){
		printf("Connessione a %s avvenuta senza problemi.\n", address);
		printf("Inizio comunicazione.\n");
	}
	else{
		printf("Errore durante la connessione.\n");
	}

	while (mymex!="q"){
		
		clearbuffers();
		recv(server, servmex, 256, 0);
		printf("%s\n", servmex);
		scanf("%s", mymex);
		send(server, mymex, 100, 0);

	}

	close(server);

	if (err!=-1) printf("Fine comunicazione.");

}

void clearbuffers(){

	int i;

	for (i=0; i<100; i++){
		mymex[i]='{parsed_message}';
	}

	for (i=0; i<256; i++){
		servmex[i]='{parsed_message}';
	}

}


P.S: Ho anche provato a togliere la funzione clearbuffers, ma non cambia niente :(

Grazie a tutti quelli che risponderanno.
'; } }


P.S: Ho anche provato a togliere la funzione clearbuffers, ma non cambia niente :(

Grazie a tutti quelli che risponderanno.
Ultima modifica effettuata da Il_Bomba 20/01/12 21:18
aaa
21/01/12 22:22
lorenzo
ora non ho tempo per testarlo e lo farò domani, però prova a mettere questo al posto del while:


while(strcmp(mymex, "q") != 0)
{
    memset(servmex, 0, 256);
    memset(mymex, 0, 100);
    recv(server, servmex, 256, 0);
    printf("%s\n", servmex);
    scanf("%s", mymex);
    send(server, mymex, 100, 0);
}



ricordati che il confronto tra stringhe in c non si fa con '=' ma con la funzione strcmp.
quindi la condizione del while non avrà mai effetto.
aaa
21/01/12 22:22
lorenzo
ora non ho tempo per testarlo e lo farò domani, però prova a mettere questo al posto del while:


while(strcmp(mymex, "q") != 0)
{
    memset(servmex, 0, 256);
    memset(mymex, 0, 100);
    recv(server, servmex, 256, 0);
    printf("%s\n", servmex);
    scanf("%s", mymex);
    send(server, mymex, 100, 0);
}



ricordati che il confronto tra stringhe in c non si fa con '=' ma con la funzione strcmp.
quindi la condizione del while non avrà mai effetto.
aaa
22/01/12 16:27
lorenzo
non vedo grossi problemi nel codice, posta anche il server così vediamo cosa succede...
aaa