connect(SOCKET s, const struct sockaddr *name, int namelen)
请问这个sockaddr如果是localhost的话怎么填写?
s.sin_family = AF_INET;
s.sin_port = htons(2000);
s.sin_addr.s_addr= ??
我用127.0.0.1怎么都连不上,但是如果我用192.168.0.56类似这样的IP就可以连上了。注意,我用192.168.0.56可以连接成功,说明服务器端程序没有问题,本代码中其他
部分也没有问题。我想就是这个s.sin_addr.s_addr=怎么设置的问题。

解决方案 »

  1.   

    s.sin_addr.s_addr=inet_addr("127.0.0.1");
    你服务器listen的地址怎么写的呢
      

  2.   

    s.sin_addr.s_addr = inet_addr("127.0.0.1");
      

  3.   

    我尝试过了,不行。
    我用GetLastError,然后FormatMessage输出得到的消息是:
    No connection could be made because the target machine actively refused it.但是换成我内网的ip:192.168.0.56就连接上了...可能是什么原因呢?
      

  4.   

    使用
    s.sin_addr.s_addr = htonl( INADDR_ANY ); 
    or
    s.sin_addr.s_addr = 0;不管你用127.0.0.1还是192.168.0.56都可以连的上
      

  5.   

    你的机器有双网卡(或者其他的AD猫什么的,因为你可能有双IP地址)么?如果没有,说明服务器不允许用这种方式访问。
      

  6.   

    先gethostname
    再gethostbyname
    然后设置这个地址!
      

  7.   

    s.sin_addr.s_addr = htonl( INADDR_ANY ); 
    or
    s.sin_addr.s_addr = 0;尝试过,不行的。服务器可以限制的么?怎么限制阿?
      

  8.   


    试试这样行不行char lchost[] = "localhost";
    hostent* pthh = gethostbyname(lchost);sockaddr_in servaddr;
    memcpy(&servaddr.sin_addr , pthh->h_addr , ptrh->h_length );connect(s,(sockaddr*)&servaddr,sizeof(servaddr));
      

  9.   

    To DentistryDoctor 
     
    > 得看服务器上是绑定在什么地址上的。能说的详细点么?比如服务器绑定在什么地方就可以,什么地方就不行呢?
      

  10.   

    连接localhost的话,填你本机的IP地址就可以了。
    s.sin_addr.s_addr = 本机的IP
      

  11.   

    你服务程序启动监听后,在dos 窗口中,输入  netstat -an指令
    看你监听的地址是如何写的?推荐你写
    SvrListen.sin_addr.s_addr = inet_addr ("0.0.0.0");
    这样,无论你写localhost 或者127.0.0.1 ,甚至你上面写的地址,都OK
      

  12.   

    ServerAddr.sin_addr.S_un.S_addr = inet_addr("10.0.0.123");