Ir ao conteúdo
  • Cadastre-se

Programação com sockets - c


NandaFrança

Posts recomendados

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

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...