• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Copa_7

Socket TCP - Enviar de dois argumentos

3 mensagens neste tópico

Boas, eu quero enviar do cliente para o servidor duas palavras passadas por argumento do cliente. E o servidor tem que as guardar no buffer, mas em separado. No cliente tenho:

        msg_len=strlen(argv[1]);
write(sockfd,argv[1],msg_len);
msg_len=strlen(argv[2]);
write(sockfd,argv[2],msg_len);

No servidor tenho:

int ReadLine(int sockfd,char* buffer,int maxlen){
int n,rc;
char c;

for(n=1;n<maxlen;n++){
	if((rc=read(sockfd,&c,1))==1){
		if(n==5)
		*buffer++=' ';
		if(n>5)
		*buffer++='*';
		if(n<5)
		*buffer++=c;

		if(c=='\n') break;
	}else if (rc==0) {
		if(n==0) return(0); /*EOF*/
		else break; /*EOF mas ja leu alguns dados*/
	} else return(-1); /*Erro*/
}
*buffer=0;
return(n);
}

As condições de n com o valor 5, foi so para testar, porque o que queria la ter era o tamanho do primeiro argumento enviado. Como posso receber o tamanho do primeiro argumento enviado pelo cliente??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com um protocolo simples. Por exemplo, podes estabelecer que o 1º byte recebido é o tamanho do argumento. Assim, ao leres o 1º byte recebido para um unsigned char, ficas com o tamanho do argumento e já sabes quantos bytes tens que ler.

Com 1 byte ficas limitado a um tamanho máximo de 255 bytes para o argumento. Se precisares de mais, defines que, em vez de ser só o 1º, são os 2 ou 4 primeiros bytes que definem o tamanho do argumento, e lê-los para um unsigned short ou unsigned long, para um tamanho máximo do argumento de, respectivamente, 65.535 ou 4.294.967.295, o que suponho que seja suficiente ::)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora