#include <iostream>
#include <WinSock2.h>using namespace std;
#pragma comment(lib,"ws2_32.lib")int main()
{
//SOCKET myServer;
char ipAddress[100] ="172.16.1.16" ;
int iSockNumServer = 0;
struct sockaddr_in server;
int temp = 0; //////////////////////////////////////////////////////////////////////////111111111111111
int nErr;
unsigned short ver;
WSADATA data;//这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据。它包含Winsock.dll 执行的数据。 
ver = MAKEWORD( 2, 0); //这个宏创建一个被指定变量连接而成的WORD变量。返回一个WORD变量。
nErr = WSAStartup( ver, &data );//为了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化
// 异步套接字的启动命令。
cout << "nErr : " << nErr << endl; //////////////////////////////////////////////////////////////////////////222222222222222
iSockNumServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
cout << "iSocketNumServer: " << iSockNumServer << endl; memset(&server,0,sizeof(struct sockaddr_in));
server.sin_family = AF_INET;
server.sin_addr.s_addr =  inet_addr("172.16.1.16");
server.sin_port = htons(80); //////////////////////////////////////////////////////////////////////////333333333333333
temp = connect(iSockNumServer, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
cout << temp << endl; return 0; //connect(iSockNumServer,"172.16.1.16",strlen("172.16.1.16"));
}
IP是我自己的IP  但是connect一直返回-1. 求帮助

解决方案 »

  1.   

    server.sin_port = htons(80);
    服务器和客户端的端口号改成4000试试
      

  2.   

    看看错误代码是什么#include <iostream>
    #include <WinSock2.h>using namespace std;
    #pragma comment(lib,"ws2_32.lib")int main()
    {
        //SOCKET myServer;
        char ipAddress[100] ="172.16.1.16" ;
        int    iSockNumServer = 0;
        struct sockaddr_in server;
        int temp = 0;

        //////////////////////////////////////////////////////////////////////////111111111111111
        int nErr;
        unsigned short ver;
        WSADATA data;//这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据。它包含Winsock.dll 执行的数据。 
        ver = MAKEWORD( 2, 0); //这个宏创建一个被指定变量连接而成的WORD变量。返回一个WORD变量。
        nErr = WSAStartup( ver, &data );//为了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化
    // 异步套接字的启动命令。
    if ( nErr != 0 )
    cout << "nErr : " << nErr <<"Error Code :"<<WSAGetLastError()<< endl;

        //////////////////////////////////////////////////////////////////////////222222222222222
        iSockNumServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if ( INVALID_SOCKET == iSockNumServer )
     cout << "iSocketNumServer: " << iSockNumServer <<"Error Code :"<<WSAGetLastError()<< endl;

        memset(&server,0,sizeof(struct sockaddr_in));
        server.sin_family = AF_INET;
        server.sin_addr.s_addr =  inet_addr("172.16.1.16");
        server.sin_port = htons(80);

        //////////////////////////////////////////////////////////////////////////333333333333333
        temp = connect(iSockNumServer, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
    if ( SOCKET_ERROR == temp )
     cout << temp <<" Error Code :"<<WSAGetLastError()<< endl;

    WSACleanup();
        return 0;

        //connect(iSockNumServer,"172.16.1.16",strlen("172.16.1.16"));
    }
      

  3.   

    我用GetLastError()得到一个10061的值 改成4000也不行
      

  4.   

    sckConnectionRefused 10061 强行拒绝连接。 
      

  5.   

    1,確定連接了正確的端口和主機地址,如果有網絡分析工具,你可以檢查一下,端口和主機是不是你要連接的。
    2,檢查服務器的應用是不是在運行中。
    3,檢查服務器的監聽端口。
    4,如果此問題出現在負載測試中,可能是服務器的socket隊列不足了,要解決的話嘗試如下:
    A:修改服務器的應用以處理更多的requests.
    B:手工輸入如下的相似代碼:
    while (create_socket(“socket″, “TCP”, “RemoteHost=LDNTAS42:671″, LrsLastArg) == 10061) ;
      

  6.   

    谢谢上面的童靴们的意见,我加了一个bind()就可以了