Kandrade 7 Denunciar post Postado Janeiro 7, 2008 Bom, isso foi desenvolvido no Linux, por isso não funcionará no Windows. Para quem quer aprender a usar socket pode ser uma boa oportunidade instalar esse Sistema Operacional. :D server.c /* server.c */ #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<unistd.h> #include<stdlib.h> #include<stdio.h> main() { int cont,create_socket,new_socket,addrlen,tempo; int bufsize = 128; char *buffer = malloc(bufsize); struct sockaddr_in address; if ((create_socket = socket(AF_INET,SOCK_STREAM,0)) > 0) printf("Socket criado!!!\n"); address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(15000); if (bind(create_socket,(struct sockaddr *)&address,sizeof(address)) == 0) printf("Escutando...\n"); listen(create_socket,3); addrlen = sizeof(struct sockaddr_in); new_socket = accept(create_socket,(struct sockaddr *)&address,&addrlen); if (new_socket > 0){ printf("O cliente %s esta conectado...\n",inet_ntoa(address.sin_addr)); for(cont=1;cont<5000;cont++) printf("\x7"); } recv(new_socket,buffer,bufsize,0); tempo=atoi(buffer); sleep(tempo); strcpy (buffer,"Acorde ja se passaram os segundos desejados"); send(new_socket,buffer,bufsize,0); close(new_socket); close(create_socket); } client.c /* client.c */ #include<sys/socket.h> #include<sys/types.h> #include<netinet/in.h> #include<unistd.h> #include<stdlib.h> #include<stdio.h> main(int argc,char *argv[]) { int create_socket; int bufsize = 128; char *buffer = malloc(bufsize); struct sockaddr_in address; if (argc<=3) { printf ("use assim: ./%s ip_servidor SET x , onde x e o tempo em segundos!!!\n",argv[0]); exit (0); } else strcpy(buffer,argv[2]); if (strcmp(buffer,"SET")==0) strcpy(buffer,argv[3]); else { printf ("sua sintaxe contem erro!!!\n"); exit (0); } if ((create_socket = socket(AF_INET,SOCK_STREAM,0)) > 0) printf("Socket criado!!!\n"); address.sin_family = AF_INET; address.sin_port = htons(15000); inet_pton(AF_INET,argv[1],&address.sin_addr); if (connect(create_socket,(struct sockaddr *)&address,sizeof(address)) == 0) printf("A conexao foi aceita com o servidor %s...\n",inet_ntoa(address.sin_addr)); send(create_socket,buffer,bufsize,0); recv(create_socket,buffer,bufsize,0); printf ("%s\n",buffer); close(create_socket); } Compile-os e execute primeiro o server. Não tem muito segredo os parametros são passados no cliente ele enviará uma mensagem ao servidor contendo um valor em segundos. O servidor aguardará esse tempo e após o termino enviará uma mensagem ao cliente avisando que o tempo se passou. Se alguém quiser discutir o código é só postar. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Janeiro 7, 2008 Legal Kandrade! Pergunta: programar em C++ em Windows ou em Linux é quase a mesma coisa? oq é q muda? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Janeiro 7, 2008 Não há grandes diferenças. O que pode ocasionar problemas são as APIs. Quando uma API é escrita para trabalhar somente com um Sistema Operacional específico. Um outro problema é com relação ao compilador. Isso em C pode trazer problemas. O gcc trabalha com o padrão ANSI C, alguns outros compiladores para Windows não obedecem esse padrão. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Janeiro 8, 2008 Boa explicação vlw http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Plutonius 0 Denunciar post Postado Junho 25, 2008 Tenho só uma dúvida bem básica: Estou tentando entender o básico de sockets pelos seus programas e parece realmente bem simples... Pq o servidor tem bufsize = 64 e o cliente tem bufsize = 128 ? Obrigado !!! A duvida é pq um dos parametros do send e recv é o bufsize... E se eu vou enviar uma msg de tamanho 128, como receber em uma msg de 64 e vice-versa ? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Junho 25, 2008 Na verdade deveriam ser iguais. Nesse caso a mensagem é padrão e não teria problema, mas realmente poderia ocasionar um erro. Vou modificar. Obrigado por nos informar. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites