/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Error en cliente con funcion bind()

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dreams_eater



Registrado: 03 Oct 2007
Mensajes: 21

MensajePublicado: 16/11/2007 2:33 pm
Título: Error en cliente con funcion bind()

Se trata de un server y un cliente en una misma maquina con windows XP.
Hablaran en puertos diferentes.
No quiero dejar al azar el puerto!!
Nota: uso router, no se si es eso.
Código:
/*create simple client TCP_IP*/
#include <winsock.h>
#include <iostream>
#define MY_PORT 2456
#define BIND_ERROR SOCKET_ERROR
#define CONNECT_ERROR SOCKET_ERROR
#include<conio2.h>
#include<string.h>
using namespace std;


int main(int argc, char *argv[])
{
    WSAData WSApepenet;//declared struct (conseptual dll of windows dedicated to internet "Windows Sockets Addres")
    //WSAData es una estructura con datitos que nunca manejas
    int mysocket;//declared descriptor socket
    sockaddr_in mydata_in;//declared necesary data for ADDResing _INternet
    //donde veas addr, es casi seguro que es la IP o tiene un elemeto addr que es la ip
    //addr=IP
   
    int sizedata=sizeof(struct sockaddr);//size of data addresing
    char bufsend[14];//mensege to server
    char bufrecv[14];//menssaje for server
    strcpy(bufsend,"hello server");
    if (WSAStartup(MAKEWORD(1, 1), &WSApepenet))
    {
        cerr << "WSAStartup failure";
        getch();
        return 1;
     }//initialize sockets dll, WSAStartup return nonzero on failure
    if(!(mysocket=socket(PF_INET,SOCK_STREAM,0)))
    {
       cerr<<"Invalid Soket";
       WSACleanup();//desconect WSA
       getch();
       return 1;
    }//initialize descriptor socket (TCP_IP)
    //PF_INET=Protocol Family _INternET
     mydata_in.sin_family=AF_INET;//Addresing Family _INternET
     mydata_in.sin_port=htons(MY_PORT);//tranfer short int and insert my port
     mydata_in.sin_addr.s_addr=htonl(INADDR_ANY);//tranfer and insert dynamic IP, la del server
     //que solo en este caso es la propia, ya que server y cliente estaran en la misma pc
     memset(&(mydata_in.sin_zero),'\0',8);//fill with zero, free espace
     //allready fill mydata_in
     // para evetar "Address already in use" error message
     char reus;
     reus='1';
     char* reuse;
     reuse=&reus;
     if (setsockopt(mysocket,SOL_SOCKET,SO_REUSEADDR,reuse,sizeof(char))==-1)
     {
       cerr<<"setsockopt failure";
       if(SOCKET_ERROR==(closesocket(mysocket)))cerr<<"\nClose soket failure";//desconect socket
       WSACleanup();
       return 1;
     }
     if(BIND_ERROR==(bind(mysocket,(struct sockaddr*)& mydata_in,sizedata)))
     {
       cerr<<"set to listen failure";
       if(SOCKET_ERROR==(closesocket(mysocket)))cerr<<"\nClose soket failure";//desconect socket
       WSACleanup();//desconect WSA
       getch();
       return 1;
     }//set to listen in the port on client
     //pone la oreja en la puerta, pero no escucha nada de nada
     //nos conectaremos con nosotros mismos, por eso uso mydata_in en connect
     //los clientes tenemos una sola oreja y usamos solo esa, a menos que querramos conecciones complejas
     if(CONNECT_ERROR==(connect(mysocket,(struct sockaddr*)& mydata_in,sizedata)))
     {
       cerr<<"conecct failure";
       if(SOCKET_ERROR==(closesocket(mysocket)))cerr<<"\nClose soket failure";//desconect socket
       WSACleanup();//desconect WSA
       getch();
       return 1;
     }//nos conectamos!!!
     cout<<"\nSending data...";
     send(mysocket,bufsend,sizeof(bufsend),0);//send data of the bufsend
     cout<<"\nRecived data...";
     recv(mysocket,bufrecv,sizeof(bufrecv),0);//recive data in bufrecv
     //recv return size of the mensaje
     cout<<"\n"<<bufrecv;
     cout<<"\end of simple client...";
     //como no vamos a comunicarnos más con server...
     if(SOCKET_ERROR==(closesocket(mysocket)))cerr<<"\nClose soket failure";//desconect socket
     WSACleanup();//desconect WSA
     getch();
    return 0;
}

La falla esta en connect. la estoy buscando.
Volver arriba
dreams_eater



Registrado: 03 Oct 2007
Mensajes: 21

MensajePublicado: 17/11/2007 4:54 pm
Título:

si, descubri la falla, pero desconozco los porque.
Ejecuto el server pero aun así no se conecta con el.
La falla se encuentra que al intentar hacer un bind y un connect a la misma maquina. si alguien sabe de un codigo que no deje al asar el puerto donde va a escuchar, se lo agradeceria. Recuerden que es a la misma maquina y que hace en este caso para dar error de server no conectado?
gracias.
Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com