Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kandrade

[Código] Despertador usando socket

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.