Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 /
#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);
}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
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.
Boa explicação vlw http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
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 ?
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
Legal Kandrade!
Pergunta: programar em C++ em Windows ou em Linux é quase a mesma coisa? oq é q muda?