seuqram Posted May 7, 2012 at 09:11 PM Report #453645 Posted May 7, 2012 at 09:11 PM pessoal eu vou iniciar o estudo dos servers e queria que me ajudassem a perceber melhor os ips... como eu farei para ligar c++ a um server? ou como, em c++ criar um server? estou ainda muito confuso nessa parte, onde vou buscar o ip? como vou fazer comunicar o programa com um programa de outro computador com um server c++? objetivo: criar um jogo multiplayer online obrigado,seuqram...
pikax Posted May 7, 2012 at 09:24 PM Report #453648 Posted May 7, 2012 at 09:24 PM Tens que utilizar sockets. Depois de connectado por sockets, vais buscar o IP muito facilmente Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
polska Posted May 7, 2012 at 09:51 PM Report #453658 Posted May 7, 2012 at 09:51 PM Tens que utilizar sockets. Depois de connectado por sockets, vais buscar o IP muito facilmente Pikax podes indicar algum site ou algo que nos ajude a trabalhar com coisas deste genero? Tipo, como o seuqram disse, os ip's, mas também trabalhar com os protocolos udp, tcp e esse tipo de programação? Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
pikax Posted May 7, 2012 at 10:07 PM Report #453663 Posted May 7, 2012 at 10:07 PM Pikax podes indicar algum site ou algo que nos ajude a trabalhar com coisas deste genero? Tipo, como o seuqram disse, os ip's, mas também trabalhar com os protocolos udp, tcp e esse tipo de programação? http://beej.us/guide/bgnet/output/html/multipage/index.html Para saber o IP de um cliente que esteja connectado, tens algumas formas para o fazer Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
polska Posted May 7, 2012 at 10:24 PM Report #453673 Posted May 7, 2012 at 10:24 PM http://beej.us/guide/bgnet/output/html/multipage/index.html Para saber o IP de um cliente que esteja connectado, tens algumas formas para o fazer Thanks 🙂 Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
seuqram Posted May 8, 2012 at 12:16 PM Author Report #453774 Posted May 8, 2012 at 12:16 PM http://beej.us/guide/bgnet/output/html/multipage/index.html Para saber o IP de um cliente que esteja connectado, tens algumas formas para o fazer pikax que biblioteca é essa? pode-se fazer no dev c++? e podes-me dar um mini exemplo? obrigado 🙂
pikax Posted May 8, 2012 at 05:46 PM Report #453913 Posted May 8, 2012 at 05:46 PM conforme, em linux e' uma e em windows e' outra. Podes fazer com qualquer IDE com o compilador gcc(minGW). Este codigo esta feito para funcionar em linux, basta fazer algumas alteracoes faceis para ele funcionar em windows, isto e' um cliente - servidor que fiz num teste. cliente /**************************************** | 1º TESTE DE AVALIAçãO 17/11/2011 | Redes de Computadores | Nome: Nr: | Turma: | | Aluno: | | Professor: | | Avaliação: | | Escola Secundária D. Afonso Sanches | Curso Profissional de Programação | e Gestão de Sistemas Informáticos *****************************************/ // CLIENTE #include <sys/types.h> #include <sys/socket.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <errno.h> #include <netdb.h> #include <unistd.h> #include <sys/select.h> #define NR_CARACTERES 400 #define PORTA 7000 int main(){ struct hostent *hostip; int sock; char mensagem[NR_CARACTERES]; unsigned int tamanho; struct sockaddr_in sockaddr; int nrOrdem=89; /* Insira um comentário apropriado */ sock=socket(AF_INET, SOCK_STREAM, 0); if (sock==-1) perror("Socket"); /* Insira um comentário apropriado */ sockaddr.sin_family = AF_INET; sockaddr.sin_addr.s_addr = INADDR_ANY; sockaddr.sin_port = htons(PORTA); /* Insira um comentário apropriado */ if ((hostip = gethostbyname("localhost")) == NULL) { puts("Error resolving hostname.."); exit(1); } // Preparação do connect() -- NÃO ALTERAR!!!! memcpy(&sockaddr.sin_addr, hostip->h_addr_list[0], hostip->h_length); if (connect(sock,(struct sockaddr *) &sockaddr,sizeof(sockaddr)) < 0) error("ERROR connecting"); read(sock,mensagem,NR_CARACTERES); printf("sms recebida= %s",mensagem); if(mensagem[0]=='a') { read(sock,mensagem,NR_CARACTERES); printf("\nsms recebida= %s",mensagem); printf("\nEscreva a mensagem:"); gets(mensagem); write(sock,mensagem,NR_CARACTERES); read(sock,mensagem,NR_CARACTERES); printf("\nsms recebida= %s",mensagem); printf("\nEscreva a mensagem:"); gets(mensagem); write(sock,mensagem,NR_CARACTERES); } else { printf("\nEscreva a mensagem:"); gets(mensagem); write(sock,mensagem,NR_CARACTERES); read(sock,mensagem,NR_CARACTERES); printf("\nsms recebida= %s",mensagem); printf("\nEscreva a mensagem:"); gets(mensagem); write(sock,mensagem,NR_CARACTERES); read(sock,mensagem,NR_CARACTERES); printf("\nsms recebida= %s\n",mensagem); } close(sock); return 0; } server /**************************************** | 1º TESTE DE AVALIAçãO 17/11/2011 | Redes de Computadores | Nome: Nr: | Turma: | | Aluno: Carlos David Carvalho Rodrigues | | Professor: Nuno Pereira | | Avaliação: | | Escola Secundária D. Afonso Sanches | Curso Profissional de Programação | e Gestão de Sistemas Informáticos *****************************************/ // SERVIDOR #include <sys/types.h> #include <sys/socket.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <errno.h> #include <netdb.h> #include <unistd.h> #include <sys/select.h> #define TAM 400 #define PORTA 7000 int main() { int DSCR; unsigned int len; int new_DSR; int new_DSR2; char mensagem[TAM]; /* Comentário nº 1: Insira um comentário de resposta à questão 2.1 */ struct sockaddr_in address; /********************************************* ** Comentário nº1-resposta ** ** A estrutura do sockaddr_in serve para ** ** guardar os endereços de IP entre outras ** ** informações necessárias para o computador** ** comunicar com o outro. ** *********************************************/ /* Comentário nº 2: Insira um Comentário de resposta à questão 2.2 */ /********************************************* ** Resposta à questão 2.2 ** ** A função socket irá retornar uma um ** ** "descritor" para identificar o socket se ** ** der erro a função irá retornar -1. ** *********************************************/ // Nota: usar opões: AF_INET e SOCK_STREAM, DSCR=socket(AF_INET,SOCK_STREAM,0); if (DSCR==-1) perror("Socket"); /* Comentário nº 3: Insira um comentário de resposta à questão 4 */ /********************************************* ** Comentário nº3-resposta ** ** A primeira linha é para identificar a ** ** familia a que a estrutura irá utilizar ** ** para comunicar com o outro programa, já ** ** a segunda é para defenir o IP a que irá ** ** se conectar, mas aqui neste código esta- ** ** mos a dizer à estrutura que será qualquer** ** máquina ** *********************************************/ address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(7000); //bind socket resposta à pergunta 2.4 if(bind(DSCR, (struct sockaddr *) &address, sizeof (address))== -1) { printf("ERROR a fazer bind!\n"); close(DSCR); return 1; } if(listen(DSCR, 1) == -1) { printf("ERROR a fazer listen!\n"); close(DSCR); return 1; } //len = sizeof(struct sockaddr_in); new_DSR=accept(DSCR,NULL, NULL); /* Resposta à questão 2.5 */ if (new_DSR<0) perror("Accept"); mensagem[0]='b'; write(new_DSR,mensagem,TAM); new_DSR2=accept(DSCR,NULL, NULL); if (new_DSR<0) perror("Accept2"); mensagem[0]='a'; write(new_DSR2,mensagem,TAM); /* Comentário nº 4: Insira um comentário de resposta à questão 2.7 */ /********************************************* ** Comentárioº4 - resposta ** ** Para receber alguma mensagem podemos ** ** utilizar várias funções, como o sscanf, ** ** recv, entre outras, aqui utilizei o recv ** ** porque achei mais apropriado. ** *********************************************/ /* Resposta à questão 2.6 */ recv(new_DSR, mensagem, TAM, 0); write(new_DSR2,mensagem,TAM); recv(new_DSR2, mensagem, TAM, 0); write(new_DSR,mensagem,TAM); recv(new_DSR, mensagem, TAM, 0); write(new_DSR2,mensagem,TAM); recv(new_DSR2, mensagem, TAM, 0); write(new_DSR,mensagem,TAM); /* Resposta à questão 2.8 */ close(DSCR); close(new_DSR); close(new_DSR2); return 0; } PS: e' preciso executar 2 clientes Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
seuqram Posted May 8, 2012 at 05:54 PM Author Report #453916 Posted May 8, 2012 at 05:54 PM porra! tantas bibliotecas... não há uma maneira mais facil de o fazer? e ajudas-me a perceber um bocado disto?
pikax Posted May 8, 2012 at 06:02 PM Report #453920 Posted May 8, 2012 at 06:02 PM isto e' para linux, para windows basta usar o winsock2.h. podes sempre procurar por uma biblioteca de sockets em C++, e fica muito mais facil, eu como gosto de nao utilizar bibliotecas que eu nao saiba implementar manualmente. encontrei esta class aqui http://www.adp-gmbh.ch/win/misc/sockets.html Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
seuqram Posted May 8, 2012 at 07:46 PM Author Report #453940 Posted May 8, 2012 at 07:46 PM podes-me ajudar a perceber melhor isto? para começar que meto no meu programa para que ele abra a porta ou algo assim? #include<winsock2.h> \\... estou um bocado baralhado 😉
bsccara Posted May 8, 2012 at 08:08 PM Report #453945 Posted May 8, 2012 at 08:08 PM Tens praticamente tudo sobre o Winsock2 aqui, incluindo exemplos: http://www.tenouk.com/cnwinsock2tutorials.html
seuqram Posted July 21, 2012 at 06:50 PM Author Report #469549 Posted July 21, 2012 at 06:50 PM (edited) meu 1º objetivo em redes vai ser em criar um chat! tenho que mandar informações de um computador para o outro e, para isso preciso de saber os ips de cada computador. eu já estudei melhor um site e já sei algumas funções mesmo assim continuo a não perceber lá muito :/ server: #include<winsock2.h> #include<stdio.h> #include<stdlib.h> int main() { char buffer[1]; WSADATA WsaDat; SOCKET s; s=socket(AF_INET,SOCK_STREAM,0); sockaddr_in addr; addr.sin_family=AF_INET; addr.sin_port=htons(5001); addr.sin_addr.s_addr=inet_addr("52.123.72.251"); while(system("pause")!=0){recv(s,buffer,sizeof(buffer),0);printf("%c",buffer[0]);} } client: #include<winsock2.h> #include<stdio.h> #include<stdlib.h> int main() { char buffer[1]={1}; WSADATA WsaDat; SOCKET s; s=socket(AF_INET,SOCK_STREAM,0); sockaddr_in addr; addr.sin_family=AF_INET; addr.sin_port=htons(5001); addr.sin_addr.s_addr=inet_addr("52.123.72.251"); system("pause"); if((connect(s,(sockaddr*)&addr,sizeof(addr)))==SOCKET_ERROR){WSACleanup();printf("conexao falhou!!!");} else send(s,buffer,sizeof(buffer),0); system("pause"); } não se riam o.O Ajudam-me, diagam-me o que está mal e o que eu tenho que fazer para que o server leia o digito 1 Edited July 22, 2012 at 11:53 PM by seuqram
HappyHippyHippo Posted July 23, 2012 at 07:27 AM Report #469708 Posted July 23, 2012 at 07:27 AM http://www.linuxhowtos.org/C_C++/socket.htm IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pikax Posted July 23, 2012 at 08:36 AM Report #469714 Posted July 23, 2012 at 08:36 AM nao viste o meu post que tem um server e client?? So' percisas de substituir maior parte das bibliotecas de linux, pela a winsocks2 e iniciar o WSDATA e o programa roda em Windows Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
seuqram Posted July 23, 2012 at 12:43 PM Author Report #469744 Posted July 23, 2012 at 12:43 PM <.< eu não quero sites em inglês, nem programas linux nem copiar os códigos fontes!!! quero que me digam o que está mal no meu server/client e o que posso fazer para digitar 1!!! server #include<winsock2.h> #include<stdio.h> #include<stdlib.h> int main() { char buffer[2]; WSADATA WsaDat; SOCKET s[3]; s[0]=socket(AF_INET,SOCK_STREAM,0); sockaddr_in me; sockaddr you[2]; me.sin_family=AF_INET; me.sin_port=htons(5555); me.sin_addr.s_addr=htonl(20.63.36.11); system("pause"); recv(s[0],buffer,2,0); printf("%c\n",buffer[0]); system("pause"); } cliente #include<winsock2.h> #include<stdio.h> #include<stdlib.h> int main() { char buffer[1]={'h'}; char a[15]; WSADATA WsaDat; SOCKET s; s=socket(AF_INET,SOCK_STREAM,0); sockaddr_in you; sprintf(a,"20.63.36.11"); you.sin_family=AF_INET; you.sin_port=htons(5555); you.sin_addr.s_addr=inet_addr(a); system("pause"); if(connect(s,(LPSOCKADDR)&you,sizeof(you))==SOCKET_ERROR) { WSACleanup(); printf("conexao falhou!!!"); } send(s,buffer,sizeof(buffer),0); system("pause"); }
pikax Posted July 23, 2012 at 12:59 PM Report #469748 Posted July 23, 2012 at 12:59 PM <.< eu não quero sites em inglês, nem programas linux nem copiar os códigos fontes!!! quero que me digam o que está mal no meu server/client e o que posso fazer para digitar 1!!! Eu sinceramente nao gosto da tua atitude, nao queres em ingles, google e' teu amigo.... nao e' copiar, e' ver o que eu fiz e ves logo qual e' a chamada que te falta!!! Nao queres programas em linux, azar o teu... Devido 'a tua atitude eu nao te ajudo, espero que outra pessoa te ajude.... Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
seuqram Posted July 23, 2012 at 01:06 PM Author Report #469749 Posted July 23, 2012 at 01:06 PM Eu sinceramente nao gosto da tua atitude, nao queres em ingles, google e' teu amigo.... nao e' copiar, e' ver o que eu fiz e ves logo qual e' a chamada que te falta!!! Nao queres programas em linux, azar o teu... Devido 'a tua atitude eu nao te ajudo, espero que outra pessoa te ajude.... já pesquisei no google todo eu ja vi uns 100 exemplos por isso n quero mais sites nem mais exemplos, quero ajuda vossa! qual a atitude? assim mais vale n dizer nada e não aprender nada... eu sou novo por isso nao sei bem ingles em texto e o tradutor traduz muito mal. espras que outra pessoa me ajude? se não forem voces nunca vou aprender
pikax Posted July 23, 2012 at 01:18 PM Report #469750 Posted July 23, 2012 at 01:18 PM Nem vale a pena comentar... Queres em portugues tens na wiki https://wiki.portugal-a-programar.pt/dev_geral/c/sockets_de_berkeley/ Ja' agora, usa a pesquisa do forum, esta' um tutorial de um user https://www.portugal-a-programar.pt/topic/30524-winsockets-em-c/page__hl__sockets Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
seuqram Posted July 23, 2012 at 01:18 PM Author Report #469752 Posted July 23, 2012 at 01:18 PM 1-o ip e o port do server meto um ao calhas? 2-qual acham melhor? TCP ou UDP 3-como saibo o ip do client? 4-quando o server ou o client envia a menssagem ao client ou server, teem de estar a ouvir logo que estão a enviar(ao mesmo tempo?) teem alguma contra mim?
pikax Posted July 23, 2012 at 01:25 PM Report #469753 Posted July 23, 2012 at 01:25 PM A porta a partir da 10000 acho que estas 'a vontade para escolher 'a sorte, tens que ver se a porta nao esta' ocupada por outro programa, o IP tens que meter o IP do servidor. Para ti e' o TCP, UDP e' mais complexo e da' muito mais trabalho para a informacao chegar direita. Tens que pegar no addr e converter para o IP. Um fica a ouvir e outro a enviar, ate' podes estar a ouvir e enviar ao mesmo tempo. Nao contra ti, mas contra algumas atitudes que tomas aqui, como por exemplo ate' parece que somos obrigados a te ajudar... Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now