SOCKET ADDRESS无法在某些PC上运行 - C ++

时间:2015-11-16 09:26:51

标签: c++ sockets mfc

我对SOCKET编程中的代码有疑问。

WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        //system("pause");
        //return;
    }
    SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    struct hostent *host;

    host = gethostbyname("myServer");

    /****************************/
    SOCKADDR_IN SockAddr;
    SockAddr.sin_port = htons(80);
    SockAddr.sin_family = AF_INET;
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
    /****************************/
 //CRASHING STARTS HERE
    if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0) {
        strMessage = "Connection FAILED :( Try Again";
        AfxMessageBox(strMessage);
        //return;
    }
    /******************************/
    send(Socket, params, strlen(params), 0);
    char buffer[160];
    strcpy_s(buffer, "");
    int nDataLength;
    /*******************************/
    while ((nDataLength = recv(Socket, buffer, 160, 0)) > 0) {
        int i = 0;
        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
            i += 1;
        }
    }
    /*******************************/

我的MFC静态库在某些计算机中不执行。所以我决定将我的代码中的每个函数1减1,以了解代码的哪个部分不起作用。以上是我的代码供参考。它适用于某些PC,但甚至不能在其他PC上编译。我不知道为什么。是因为兼容性?

我收到错误... exe不是有效的win32应用程序。该程序的想法是将mac add ip和计算机的序列发送给服务器进行验证。

有人可以帮我调试吗?谢谢!

机器详细信息:

Windows 10 64位

intel x64

1 个答案:

答案 0 :(得分:0)

我发现了问题,当它没有看到在gethostbyname行中输入的主机名时崩溃了。它在其他系统上崩溃的原因是因为我无法在位于C:// Windows / System32 / drivers / etc / host的主机文件中声明服务器名称。如果您有自己的服务器并且希望使用gethostbyname函数,那么这是运行程序的关键步骤。

感谢罗杰罗兰让我意识到这个问题。