Ir ao conteúdo

C erro ao receber os dados do server - socket programming


Ir à solução Resolvido por Reberth Siqueira,

Posts recomendados

Postado

E ai! Boa noite!

 

Eu to tentando aprender socket programming, mas eu to com problema para receber os dados do servidor. O código é:

 

//-- server.c

/*
	Get IP address from domain name
*/

#include<stdio.h>
#include<winsock2.h>

//#pragma comment(lib,"ws2_32.lib") //Winsock Library

int main(int argc , char *argv[])
{
	WSADATA wsa;
	SOCKET s , new_socket;
	struct sockaddr_in server , client;
	int c;
	char* message,server_reply[2000];
	int recv_size;

    //inicializa win sock
	printf("\nInitialising Winsock...");
	if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
	{
		printf("Failed. Error Code : %d",WSAGetLastError());
		return 1;
	}

	printf("Initialised.\n");

    //Create a socket
	if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET)
	{
		printf("Could not create socket : %d" , WSAGetLastError());
	}

	printf("Socket created.\n");

	//Prepare the sockaddr_in structure
	server.sin_family = AF_INET;
	server.sin_addr.s_addr = inet_addres("127.0.0.1");
	server.sin_port = htons( 8888 );

	//Bind - Criação da sessão para conexão
	if( bind(s ,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR)
	{
		printf("Bind failed with error code : %d" , WSAGetLastError());
	}

	puts("Bind done\n");

    //Fica aguardando solicitacoes de conexao
	listen(s,3);

	c = sizeof(struct sockaddr_in);

    //Encaminha os dados enquanto existe conexao
	while(new_socket = accept(s , (struct sockaddr *)&client, &c) != INVALID_SOCKET){
        puts("Connection accepted");
        message = "helo connection client";
        send(new_socket , message , strlen(message) , 0);
	}

	if (new_socket == INVALID_SOCKET)
	{
		printf("accept failed with error code : %d" , WSAGetLastError());
	}

	closesocket(s);

	return 0;

}
//--client
/*
	Initialise Winsock
*/

#include<stdio.h>
#include<WinSock2.h>

int main(int argc, char *argv[])
{
    int teste;
    WSADATA  Winsockdata;
    SOCKET s;
    struct sockaddr_in addr;
    char* message, server_reply[2000];
    int recv_size;
// Inicia o Windows Stock
    teste = WSAStartup(MAKEWORD(2,2),&Winsockdata);

    printf("\nInitialising Winsock...\n");
    if (teste != 0)
    {
        printf("Failed. Error Code : %d",WSAGetLastError());
        return 1;
    }

    printf("Initialised.\n");

// Cria o socket para conexao
    if((s = socket(AF_INET, SOCK_STREAM, 0 )) == INVALID_SOCKET)
    {
        printf("Could not create socket : %d", WSAGetLastError());
    }

    printf("Socket created.\n");

    // Configura parametros de endereço e porta do socket para conexão com o server
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    addr.sin_family = AF_INET;
	addr.sin_port = htons( 8888 );

	//Conexão entre client-server

	if (connect(s , (struct sockaddr *)&addr , sizeof(addr)) < 0)
	{
		printf("connect error");
		return 1;
	}

	printf("Connected \n");

    // Recebe dados do servidor
    recv(s,server_reply,2000,0);

	printf("Reply received\n");

    puts(server_reply);
    // Finaliza sessão
	closesocket(s);
    WSACleanup();

    return 0;
}

 

 

Eu esperava que o client.c funcionasse assim:

  • Inicia sessão WinSock; -- OK
  • Cria socket -- OK;
  • Configura conexão (IP e Porta) -- OK;
  • Realiza conexão -- OK;
  • Recebe os dados do servidor -- N/OK

 

Mas ele não está recebendo os dados do servidor, mas também não retorna um erro :(

 

 

Alguem que conhece pode me ajudar? Pls

 

 

fotos:

(SERVER SIDE) teste.c:

 

image.png.9f1234df7ee12b8131d942fa98169c49.png

 

(CLIENT SIDE) client.c :

 

image.png.d929d85c46060288d00d19fd2fa56791.png

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades sobre tecnologia do Brasil. Leia mais

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...