Ir ao conteúdo
  • Cadastre-se
NandaFrança

Programação com sockets - c

Recommended Posts

Boa tarde, preciso fazer um servidor enviar uma resposta automática a um cliente em C.

Porém não faço ideia de como realizar isso.

Ex: Cliente digita: Olá

Servidor responde: Olá tudo bem?

Já tentei utilizando if e switch, porém sem sucesso!

Alguem poderia me ajudar?

Segue código que estou utilizando no cliente e no servidor:

Servidor: 

#include "retornadata.h" // biclioteca para a data, colocar o arquivo na mesma pasta
#include <stdio.h> 
#include <conio.h> 
#include <winsock.h> 
#include <windows.h> //Repara que utilzaremos este header para utilizarmos a função Sleep(); 
#include <string.h>

WSADATA Data; 
SOCKET winsock; 
SOCKADDR_IN sock; 
char buffer[1024];
char buffer2[1024];
int bytes;
int main()

    char data_sistema[100];
    sprintf(data_sistema,"%s",data());
    printf("%s\n",data_sistema);
    
    if(WSAStartup(MAKEWORD(1,1),&Data)==SOCKET_ERROR)
    {
        printf("Erro ao inicializar o winsock"); 
        return 0; 
    }
     
    if((winsock = socket(AF_INET,SOCK_STREAM,0))==SOCKET_ERROR)
    { 
        printf("Erro ao criar socket"); 
        return 0; 
    }
     
    sock.sin_family=AF_INET;
    sock.sin_port=htons(2530); 
    
    if(bind(winsock,(SOCKADDR*)&sock,sizeof(sock))==SOCKET_ERROR)
    { 
        printf("Erro colocar utilizar a funcao BIND"); 
        return 0; 
    }
     
    listen(winsock,1); 
    
    while((winsock = accept(winsock,0,0))==SOCKET_ERROR) 
    { 
        Sleep(1); 
    }
     
    printf("Cliente conectado!\n"); 
    
    while(1)
    {
        Sleep(1);
        memset(buffer2,0,1024);
        bytes=recv(winsock,buffer2,1024,0);
        
        if(bytes==-1)
        {
            printf("Conexão perdida");
            getch();
            return 0;
        }
                
        printf(buffer2);
        printf("Digite uma mensagem:\n");
        printf("2||%s|",data_sistema);
        gets(buffer);
        strcat(buffer,"\r\n");
        send(winsock,buffer,strlen(buffer),0);
        
        

    }
    getch();
    closesocket(winsock);
    WSACleanup();
    return 0;
}

 

-----------------------------------------------------------------------------------------------------------------------------------------------

Cliente:

 

#include "retornadata.h" // biclioteca para a data, colocar o arquivo na mesma pasta
#include <stdio.h>
#include <winsock.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
WSADATA Data;
SOCKET winsock;
SOCKADDR_IN sock;
char buffer[1024];
char buffer2[1024];
int bytes;
int main()
{
    char data_sistema[100];
    sprintf(data_sistema,"%s",data());
    printf("%s\n",data_sistema);
    
    if(WSAStartup(MAKEWORD(1,1),&Data)==SOCKET_ERROR)
    {
        printf("Erro ao inicializar o winsock");
        return 0;
    }
    
    if((winsock = socket(AF_INET,SOCK_STREAM,0))==SOCKET_ERROR)
    {
        printf("Erro ao criar socket");
        return 0;
    }
    
    sock.sin_family=AF_INET;
    sock.sin_port=htons(2530);
    sock.sin_addr.s_addr=inet_addr("127.0.0.1");
    
    if(connect(winsock,(SOCKADDR*)&sock,sizeof(sock))==SOCKET_ERROR)
    {
        printf("Erro ao se conectar");
        return 0;
    }
    
    printf("Conectado!\n");
    while(1)
    {
        Sleep(1);
        printf("Digite uma mensagem:\n");
        printf("1||%s|",data_sistema);
        gets(buffer);
        strcat(buffer,"\r\n");
        send(winsock,buffer,strlen(buffer),0);
        memset(buffer2,0,1024);
        bytes=recv(winsock,buffer2,1024,0);
        
        if(bytes==-1)
        {
            printf("Conexão perdida");
            getch();
            return 0;
        }
        
        printf(buffer2);

    }
    getch();
    closesocket(winsock);
    WSACleanup();
    return 0;
}

socket.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da forma que está fazendo você só conseguirá enviar OU receber. para enviar/receber você precisará utilizar a função select().

dê uma olhada neste fluxograma: Fluxograma Cliente/Server.

 

Recomendo olhar este tutorial no binary tides, você vai encontrar o que precisa em detalhes.

Code a simple tcp socket server in winsock

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×