Logo Hardware.com.br
Azz
Azz Novo Membro Registrado
7 Mensagens 0 Curtidas

Programação em sockets............"Servidor de Calculo"...

#1 Por Azz 19/11/2006 - 14:44
Bom pessoal, tenho a seguinte duvida.

Gostaria de saber como elaborar um programa utilizando sockets em C++ para o windows, sendo que utilizo um compilador chamado DevC++. As caracteristicas deste software sao as seguintes. Tenho que fazer dois programas um cliente e o outro servidor, sendo que o cliente passa dois numeros e o servidor calcula e passa o resultado.

Alguem pode me ajudar ????
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#4 Por jackinabox
19/11/2006 - 21:52
Azz disse:
...Mas nao consigo entender nada... Sera que pode me ajudar, me mostrando o codigo, e algumas explicações das funções, e funcionamento do programa.

Bem, certamente eu e o pessoal do fórum poderíamos ajudá-lo, mas se você já leu a respeito e não conseguiu entender nada, conforme você disse, minha opinião é que vai ser difícil tentar explicar de forma mais didática através de um tópico de fórum. Esse seria um espaço adequado para resolver dúvidas, mas não para escrever um tutorial de sockets (até mesmo porque há inúmeros desses tutoriais/artigos na web, e estaríamos chovendo no molhado).

Seguem 2 links, com exemplos de implementação de um server e um client, utilizando Winsock:

http://www.codeproject.com/internet/winsockintro01.asp
http://www.codeproject.com/internet/winsockintro02.asp

Se você tiver dúvidas mais específicas, teremos satisfação em ajudá-lo.
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#7 Por jackinabox
20/11/2006 - 12:52
Azz disse:
Se tiver este codigo me envia, Jeferson...

Na realidade, não tenho. E você deveria pelo menos iniciar a fazer, pensar nos passos necessários para conectar no servidor, enviar a mensagem e receber o retorno. E, no servidor, ouvir uma porta, aceitar a conexão, receber a mensagem, fazer o cálculo e enviar a resposta.

os links que me enviou acho que tem muita coisa sobre socket mas mas dificulta minha pesquisa por ser em ingles...

Que pena, inglês é realmente fundamental, pelo menos leitura, pois a maior parte da documentação não está disponível em português.

Ser profissional (ou estudante) de informática e não saber ler em inglês é como ser advogado e não saber ler em português: não dá certo, pois como é que se vai saber o conteúdo da lei, sem saber ler?
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#11 Por jackinabox
26/11/2006 - 01:20
Azz disse:
Pode me ajudar, se poder deixa uma msg aqui, q eu te deixo o codigo.

Claro, estamos aqui para ajudar.

Mas você deve, no mínimo, saber quais são as dúvidas que você tem, senão fica difícil ajudar. É pré-requisito ter lido a respeito dos conceitos básicos e do fluxo que será necessário implementar para efetuar a comunicação cliente/servidor.

Talvez você não esteja conseguindo implementar simplesmente porque não leu nenhum tutorial e nem a documentação das funções de socket. Se você já leu, então certamente você tem, no mínimo, condições de fazer perguntas a respeito. Se não leu, precisa ler. Se não leu porque a documentação das funções está escrita em inglês, então vai ter (por exemplo) que pedir para alguém traduzir para você, não tem mágica.

Não dá para aprender essas coisas "por osmose".

No meu caso, por exemplo, aprendi lendo tutoriais e exemplos na Internet e lendo a documentação de sockets do próprio compilador.

De qualquer forma, estou postando aqui uma implementação de um "time server" (e de um cliente), extraído do FreeBSD Developer's Handbook - Chapter 7 - Sockets.

Mas veja bem, estou postando esse código apenas para você ter uma idéia, e lembre-se que não é uma implementação para Windows (os includes são diferentes, por exemplo). É um código bastante simples e direto, bom para estudar. Ah, e ler o conteúdo desse link aí acima seria uma ótima idéia, pois explica as coisas em detalhes.

Client:

/*
* daytime.c
*
* Programmed by G. Adam Stanislav
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
register int s;
register int bytes;
struct sockaddr_in sa;
char buffer[BUFSIZ+1];

if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket&quot;
return 1;
}

bzero(&sa, sizeof sa);

sa.sin_family = AF_INET;
sa.sin_port = htons(13);
sa.sin_addr.s_addr = htonl((((((192 << 8) | 43) << 8) | 244) << 8) | 18);
if (connect(s, (struct sockaddr *)&sa, sizeof sa) < 0) {
perror("connect&quot;
close(s);
return 2;
}

while ((bytes = read(s, buffer, BUFSIZ)) > 0)
write(1, buffer, bytes);

close(s);
return 0;
}


Server:
/*
* daytimed - a port 13 server
*
* Programmed by G. Adam Stanislav
* June 19, 2001
*/
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define BACKLOG 4

int main() {
register int s, c;
int b;
struct sockaddr_in sa;
time_t t;
struct tm *tm;
FILE *client;

if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket&quot;
return 1;
}

bzero(&sa, sizeof sa);

sa.sin_family = AF_INET;
sa.sin_port = htons(13);

if (INADDR_ANY)
sa.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(s, (struct sockaddr *)&sa, sizeof sa) < 0) {
perror("bind&quot;
return 2;
}

switch (fork()) {
case -1:
perror("fork&quot;
return 3;
break;
default:
close(s);
return 0;
break;
case 0:
break;
}

listen(s, BACKLOG);

for (; {
b = sizeof sa;

if ((c = accept(s, (struct sockaddr *)&sa, &b)) < 0) {
perror("daytimed accept&quot;
return 4;
}

if ((client = fdopen(c, "w&quot) == NULL) {
perror("daytimed fdopen&quot;
return 5;
}

if ((t = time(NULL)) < 0) {
perror("daytimed time&quot;

return 6;
}

tm = gmtime(&t);
fprintf(client, "%.4i-%.2i-%.2iT%.2i:%.2i:%.2iZ\n",
tm->tm_year + 1900,
tm->tm_mon + 1,
tm->tm_mday,
tm->tm_hour,
tm->tm_min,
tm->tm_sec);

fclose(client);
}
}
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
andersonoli
andersonoli Novo Membro Registrado
12 Mensagens 0 Curtidas
#12 Por andersonoli
31/03/2007 - 00:25
Olá eu tenho um trabalho de SO para fazer, ja comecei a ler alguns artigos sobre sockets, inclusive os links acima.

Quando fui tentar elaborar algum exemplo esbarrei em alguns problemas.

Meus primeiros problemas foram em relação as bibliotecas importadas no incio da implementação:

#include "ServerSocket.h"
#include "SocketException.h"
#include "ClientSocket.h"

Eu estou usando o Devc++, ele nao possui essas bibliotecas, agora nao sei o que fazer, se procuro essas bibliotecas para adiciona-las ao DevC, ou se troco de Compilador.

E se a melhor opcao for trocar de compilador gostaria de recomendações.

Muito Obrigado

Anderson Rodrigues
[email]anderson.uem@gmail.com[/email]
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#13 Por jackinabox
31/03/2007 - 10:32
andersonoli disse:

#include "ServerSocket.h"
#include "SocketException.h"
#include "ClientSocket.h"

Eu estou usando o Devc++, ele nao possui essas bibliotecas, agora nao sei o que fazer, se procuro essas bibliotecas para adiciona-las ao DevC, ou se troco de Compilador.

EDITADO: esqueça o que eu havia postado antes.
Esses #includes devem ser parte do exemplo que você estava tentando compilar. Você deve criar esses arquivos, e não esperar que façam parte do pacote do compilador.

É bem provável que esse seja o artigo original com esse exemplo. Veja que esses três arquivos estão lá:

http://linuxgazette.net/issue74/tougher.html
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
andersonoli
andersonoli Novo Membro Registrado
12 Mensagens 0 Curtidas
#15 Por andersonoli
02/04/2007 - 09:27
Olá Jeferson,

chegui em a um problema.

eu li um tuturial na net sobre sockets, eu vi algumas funcoes como:

socket(); Bind(); Listen(); além de outras.

Agora fiquei na dúvida de como implementa-los em c.
Eu devo criar uma biblioteca que contenha essas funcoes e
salva-la como .h, ou ja existem essas funções em alguma biblioteca ja pronta?

Obrigado
Anderson
[email]anderson.uem@gmail.com[/email]
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal