当我在i7计算机上使用connect()
功能时,无论是否成功连接,它总是返回零。我只是没有另一个连接的应用程序,它无论如何都返回零(服务器的地址127.0.0.1)。
当我在不同的计算机上运行相同的应用程序时,它的行为正确。那么,有什么问题呢?
谢谢。
struct hostent* pHostEntry;
pHostEntry = gethostbyname(host);
if(pHostEntry == NULL)
{
return 0;
}
struct in_addr* host_addr = (struct in_addr*) * pHostEntry->h_addr_list;
if(host_addr == NULL)
{
return 0;
}
long sockfd;
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
return 0;
}
memset((char*) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr = *host_addr;
serv_addr.sin_port = htons(port);
if(connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == SOCKET_ERROR)
{
CloseSocket();
sockfd = -1;
return 0;
}
在这里。在这里,我总是零。我当然检查了是否有任何其他应用程序监听相同的端口。那里没人。而且,如果我有一个,那么如果我的服务器开启,我就无法工作。但是当我的服务器开启时,我没有任何冲突。 i7 - &gt;英特尔(R(Core(TM)i7 CPU 930 @ 2,80GHz 2.80 GHz我现在使用此代码一段时间。我有几台具有不同操作系统和芯片的计算机。只有这个(使用OS Windows 7)有这样的问题。我只是想知道是否有人遇到同样的问题。谢谢
答案 0 :(得分:0)
Windows 7完全有可能返回远程服务器的IP6地址。我建议你查看pHostEntry->h_addrtype
。
答案 1 :(得分:0)
这一行错了:
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
在Unix上,这是有效的,因为有效的文件描述符往往是小的非负数。但根据the documentation for socket
,-1
是唯一的错误返回代码。其他负数不是错误。
现在,您正试图在Windows上运行此代码,并假设描述符是小的非负数字。
Windows文档非常清晰。 socket
returns INVALID_SOCKET
in case of error, all other values indicate success.