本帖最后由 lichengman 于 2009-12-23 00:17:07 编辑

解决方案 »

  1.   

    这是客户端的代码,是通过ad上网的ip是一个私有的192.168.0.*
    // 创建套节字
    SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s == INVALID_SOCKET)
    {
    printf(" Failed socket() \n");
    return 0;
    }

    // 也可以在这里调用bind函数绑定一个本地地址
    // 否则系统将会自动安排

    // 填写远程地址信息
    sockaddr_in servAddr; 
    servAddr.sin_family = AF_INET;
    servAddr.sin_port = htons(6666);
    // 注意,这里要填写服务器程序(TCPServer程序)所在机器的IP地址
    // 如果你的计算机没有联网,直接使用127.0.0.1即可
    servAddr.sin_addr.S_un.S_addr = inet_addr("222.201.86.104");
    int rs=::connect(s, (sockaddr*)&servAddr, sizeof(servAddr));
    if(rs!=0)
    {
    printf(" Failed connect() %d %d \n",WSAGetLastError(),rs);
    return 0;
    }

    // 接收数据
    char buff[256];
    int nRecv = ::recv(s, buff, 256, 0);
    if(nRecv > 0)
    {
    buff[nRecv] = '\0';
    printf(" 接收到数据:%s", buff);
    }
    // 关闭套节字
    ::closesocket(s);
    return 0;
      

  2.   

    这是客户端的代码,是通过ad上网的ip是一个私有的192.168.0.*
    // 创建套节字
    SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s == INVALID_SOCKET)
    {
    printf(" Failed socket() \n");
    return 0;
    }

    // 也可以在这里调用bind函数绑定一个本地地址
    // 否则系统将会自动安排

    // 填写远程地址信息
    sockaddr_in servAddr; 
    servAddr.sin_family = AF_INET;
    servAddr.sin_port = htons(6666);
    // 注意,这里要填写服务器程序(TCPServer程序)所在机器的IP地址
    // 如果你的计算机没有联网,直接使用127.0.0.1即可
    servAddr.sin_addr.S_un.S_addr = inet_addr("222.201.86.104");
    int rs=::connect(s, (sockaddr*)&servAddr, sizeof(servAddr));
    if(rs!=0)
    {
    printf(" Failed connect() %d %d \n",WSAGetLastError(),rs);
    return 0;
    }

    // 接收数据
    char buff[256];
    int nRecv = ::recv(s, buff, 256, 0);
    if(nRecv > 0)
    {
    buff[nRecv] = '\0';
    printf(" 接收到数据:%s", buff);
    }
    // 关闭套节字
    ::closesocket(s);
    return 0;
      

  3.   

    不好意思,居然发了两次的客户端的代码,
    [size=18px]我的问题是为什么客户端不能连接上服务端?[/size]
      

  4.   

    ip应该用公网机所拥有的私有ip吧,局域网路由是不认识你的公网ip的