gpt4 book ai didi

c++ - winsock 无法连接到本地主机

转载 作者:行者123 更新时间:2023-12-03 11:15:06 25 4
gpt4 key购买 nike

对于我的项目,我无法调试程序,所以我无法确定为什么会出现此错误。

我的托管在 c# 上的服务器无法连接到本地主机上的服务器。

它没有向我的服务器发回“连接”信号,它永远不会连接,我认为代码写得很好,我看不到任何错误,也许我在某个地方犯了一个粗心的错误

另外,我必须使用 gethostbyname 而不是 getaddrinfo

winsock 命名空间:

SOCKET WinSock::ConnectToServer(PCHAR IP, USHORT Port)
{
WSADATA WSA;
if (WSAStartup(MAKEWORD(2, 0), &WSA))
{
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s != SOCKET_ERROR)
{
hostent *Host = gethostbyname(IP);
if (Host != ERROR)
{
SOCKADDR_IN Addr;

Addr.sin_family = AF_INET;
Addr.sin_port = htons(Port);
Addr.sin_addr.s_addr = NULL;

if (bind(s, PSOCKADDR(&Addr), sizeof(Addr)) > 0)
{
return s;
}
}
}
}

return FALSE;
}

BOOL WinSock::SendData(SOCKET s, PBYTE Packet)
{
DWORD PacketSize = lstrlenA(PCHAR(Packet));
if (send(s, PCHAR(&PacketSize), 8, 0) > NULL)
{
if (send(s, PCHAR(Packet), PacketSize, 0) > NULL)
{
return TRUE;
}
}
return FALSE;
}

主要方法:

int main()
{
char key = 1;
SOCKET S = WinSock::ConnectToServer(0, 55480);
while(true)
{
WinSock:SendData(S, (PBYTE)key);
}
}

最佳答案

            if (bind(s, PSOCKADDR(&Addr), sizeof(Addr)) > 0)

这段代码的描述是它应该连接到服务器。但问题是 bind() 没有连接到任何服务器。它仅将套接字链接到本地​​端口。这就是监听套接字的服务器所做的。这可能是服务器已经打开的相同端口,因此 bind() 失败。如果服务器没有监听 bind(),讽刺的是,它会成功。但无论如何,它不会连接到任何东西。

你想使用 connect() 而不是 bind()

另外,我必须注意,如果这个函数首先创建了一个套接字,但由于这个或任何其他原因而未能建立连接,它将返回错误指示但无法关闭套接字,从而泄漏套接字描述符。你也必须修复这个错误。

关于c++ - winsock 无法连接到本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65288907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com