我对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
答案 0 :(得分:0)
我发现了问题,当它没有看到在gethostbyname行中输入的主机名时崩溃了。它在其他系统上崩溃的原因是因为我无法在位于C:// Windows / System32 / drivers / etc / host的主机文件中声明服务器名称。如果您有自己的服务器并且希望使用gethostbyname函数,那么这是运行程序的关键步骤。
感谢罗杰罗兰让我意识到这个问题。