Ir ao conteúdo
  • Cadastre-se

C++ envio mas não recebe.


Posts recomendados

bem, estou fazendo um programa em c++ utilizando o tcp/ip e estava funcionando até que o server começou a enviar uma informação para o cliente mas o mesmo não a recebe. vou por os trechos necessários aqui

server.cpp

  WSADATA wsaData;
    int iResult; // pega alguns resultados que o client envia
const char *sendbuf = "ha"; //bem, é usado como o vetor char do send
    SOCKET ListenSocket = INVALID_SOCKET; // socket para ouvir
    SOCKET ClientSocket = INVALID_SOCKET; // socket do 1 client
    SOCKET ClientSocket2 = INVALID_SOCKET; //socket do 2 client
    struct addrinfo *result = NULL; 
    struct addrinfo hints;

    int iSendResult;
    char recvbuf[DEFAULT_BUFLEN];
    int recvbuflen = DEFAULT_BUFLEN;

int __cdecl main(void) 
{

_beginthread(accepts,0,NULL); //accepts é onde ele vai aceitar os clients enquanto executa,se necessário

int ix2,ix, iResult2;
	for(;;){
		iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
        
		iResult2 = recv(ClientSocket2, recvbuf, recvbuflen, 0);
		printf("1:%i 2:%i recebido ",iResult, iResult2);//pus esses printf para ter noção de onde travava o programa
		
		ix2 = send(ClientSocket2, recvbuf, iResult, 0 );
        printf("primeiro enviado"); 
		ix = send(ClientSocket, sendbuf, iResult2, 0 );
Sleep(700);
}
// bem o programa do server recebe o x de dois clientes e manda o x de um para o outro{ x eh uma coordenada não tem y porque ainda não pus, vou trabalhar com apenas um antes de dois} e assim os dois clientes imprimem no y 40 e x pertencente ao programa o personagem dele( um ponto mesmo estou com preguiça) e no y 30 e x recebido do server outro ponto
void accepts(void * ){
int g=0;// a variavel que vai mostrar quando for o cliente 2 e quando for o 1 
	for(;;){
    // Initialize Winsock
    if(g==0){// se não tiver nenhum cliente ainda
	iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;

    // Resolve the server address and port
    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);

    iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
    freeaddrinfo(result);

    iResult = listen(ListenSocket, SOMAXCONN);
   ClientSocket = accept(ListenSocket, NULL, NULL);
    closesocket(ListenSocket);
g++;//mostrar que ja tem um cliente
}
else{ // se ja tiver um cliente aceito
		iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;


    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);

    freeaddrinfo(result);

    iResult = listen(ListenSocket, SOMAXCONN);

   ClientSocket2 = accept(ListenSocket, NULL, NULL);
  
    closesocket(ListenSocket);
}
}
}

cliente.cpp

void mgotoxy(int x, int y) {
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD) {
		x,y
	});
}
int __cdecl main(int argc, char **argv) 
{
    WSADATA wsaData;
    SOCKET ConnectSocket = INVALID_SOCKET;// socket para acessar o server
    struct addrinfo *result = NULL,
                    *ptr = NULL,
                    hints;
    const char *sendbuf = "ha";// vetor de char usado para receber informações
    char recvbuf[DEFAULT_BUFLEN];
    int iResult;// recebe alguns valores do server
    int recvbuflen = DEFAULT_BUFLEN;






//algumas partes de conexão depois...




printf("conectado");
int x=0,e,e2,x2=0;// x eh o x, e é a variavel que guarda o valor de x antes de andar para apagar a essa posição e2 eh para o x2(do outro cliente) e x2 eh o x do outro cliente
			Sleep(1000);
			for(;;){
	e=x;
	e2=x2;
	iResult = send( ConnectSocket, sendbuf, x, 0 );	
	printf(" enviado");
	    printf("Bytes enviados: %d\n", iResult);
		x2 = recv(ConnectSocket, recvbuf, recvbuflen, 0);			
		printf(" recebido");//ele não imprime recebido, então creio que trava na hora de receber
			if(GetAsyncKeyState(VK_RIGHT))x++; //movimentação do ponto
		if(GetAsyncKeyState(VK_LEFT))x--;
		mgotoxy(x,40);//escreve o ponto DESTE cliente
		printf(".");
		mgotoxy(e,40);//apaga o "rastro" DESTE cliente
		printf(" ");
		mgotoxy(x2,30);// escreve o outro cliente na tela deste
	    printf(".");
	    mgotoxy(e2,40);
		printf(" ");


Sleep(700);// pausa um tempinho para não ficar muito frenético
}    

bom se já verem o erro podem falar mas se precisarem do codigo inteiro me digam e eu passo daqui a pouquinho pois vou sair uns 5minutos para fazer uma caminhada 

Link para o comentário
Compartilhar em outros sites

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

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...