Programação em Sockets Fedora

1. Programação em Sockets Fedora

Cristiano Luiz Salvagni
cristiano_sa

(usa Fedora)

Enviado em 01/06/2014 - 16:57h

Olá.

Sou um pouco novo em linux e preciso criar um programa utilizando socket para que um cliente e um servidor se comuniquem através de uma mensagem e assim finalize o programa.

Abaixo o código que fui montando, peguei algumas partes aqui no Viva o Linux porém ele não está copilando.
O servidor até consegui fazer copilar, mas o cliente não.

Se puderem me ajudar fico grato.

##########
#Servidor#
##########

#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <netdb.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()

{
int meu_socket;
int sock_cliente;
struct sockaddr_in addr;

meu_socket = socket(AF_INET,SOCK_STREAM,0);

if(meu_socket == -1)
{
printf("Erro ao criar o socket!\n");
return 1;
}

addr.sin_family = AF_INET;
addr.sin_port = htons(5555);
addr.sin_addr.s_addr = INADDR_ANY;
memset(&addr.sin_zero,0,sizeof(addr.sin_zero));

if(bind(meu_socket,(struct sockaddr*)&addr,sizeof(addr)) == -1)
{
printf("Erro na funcao bind()\n");
return 1;
}

if(listen(meu_socket,1) == -1)
{
printf("Erro na funcao listen()\n");
return 1;
}

printf("Aguardando cliente...\n");

sock_cliente = accept(meu_socket,0,0);

if(sock_cliente == -1)
{
printf("Erro na funcao accept()\n");
return 1;
}

printf("Cliente conectado!\n\n");

int recebidos, enviados; /* Controle de bytes enviados e recebidos */
char mensagem[256]; /* Buffer para envio de mensagens */
char resposta[256]; /* Buffer para receber mensagens */

do /* Executa as instruções abaixo ... */
{
recebidos = recv(sock_cliente,resposta,256,0); /* Recebe mensagem do cliente */
resposta[recebidos] = '{TEXTO}'; /* Finaliza a string com o caractere NULO */
printf("Cliente: %s\n",resposta); /* Mostra a mensagem do cliente */

printf("Servidor: "); /* Simplesmente informa que deve-se preencher uma mensagem */
fgets(mensagem,256,stdin); /* Obtém uma mensagem digitada */
mensagem[strlen(mensagem)-1] = '{TEXTO}'; /* Finaliza a string */
enviados = send(sock_cliente,mensagem,strlen(mensagem),0); /* Envia a string */

}while(recebidos != -1 && enviados != -1); /* ... enquanto as funções send() e recv() não retornarem -1 = ERRO */

close(sock_cliente);
close(meu_socket);
return 0;
}

#########
#Cliente#
#########

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

int main()
{
int meu_socket;
struct sockaddr_in addr;

meu_socket = socket(AF_INET,SOCK_STREAM,0);

if(meu_socket == -1)
{
printf("Erro ao criar o socket!\n");
return 1;
}

addr.sin_family = AF_INET;
addr.sin_port = htons(5555);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");

memset(&addr.sin_zero,0,sizeof(addr.sin_zero));

printf("Tentando se conectar ao servidor...\n");

if(connect(meu_socket,(struct sockaddr*)&addr,sizeof(addr)) == -1)
{
printf("Erro ao se conectar!\n");
return 1;
}

printf("Conectado!\n\n");
int recebidos, enviados;
char mensagem[256];
char resposta[256];

do
{

/* O processo inverso é feito aqui. Como o servidor espera uma mensagem inicialmente, o cliente deverá fornecê-la */

printf("Cliente: ");
fgets(mensagem,256,stdin);
mensagem[strlen(mensagem)-1] = '{TEXTO}';
enviados = send(meu_socket,mensagem,strlen(mensagem),0);

/* Após enviar a mensagem, espera-se a resposta do servidor */

recebidos = recv(meu_socket,resposta,256,0);
resposta[recebidos] = '{TEXTO}';
printf("Servidor: %s\n",resposta);


}while(recebidos != -1 && enviados != -1);


close(meu_socket);
return 0;
}


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts