gpt4 book ai didi

C++ 套接字无法正常工作

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

又回来了(抱歉)

我已经创建了一个套接字 C++ 应用程序,但它无法正常工作。

这是我的第一个代码:

void Network::Start()
{
this->socket = Env::GetSocket();

SOCKADDR_IN sInformation;

sInformation.sin_family = AF_INET;
sInformation.sin_addr.s_addr = INADDR_ANY;
sInformation.sin_port = htons(30000);

bind(this->socket, (SOCKADDR*) (&sInformation), sizeof(sInformation));
listen(this->socket, 10);

while (true)
{
this->DO();
}
}

和 DO 函数:

void Network::DO()
{
SOCKET s = SOCKET_ERROR;

sockaddr_in sock_addr;

accept(s, (sockaddr*) &sock_addr, NULL);

if (INVALID_SOCKET == s)
{
return;
}
else
{
cout << "Received connection from " << inet_ntoa(sock_addr.sin_addr);
}
}

发生了什么,总是(即使我连接)值 s 是 INVALID_SOCKET。我通过 .SWF 连接,但它不接受我的连接。我做错了什么?

最佳答案

您没有进行足够的错误处理,也没有正确使用 accept()。试试这个:

void Network::Start()
{
this->socket = Env::GetSocket();
if (this->socket == INVALID_SOCKET)
{
// error
return;
}

SOCKADDR_IN sInformation = {0};

sInformation.sin_family = AF_INET;
sInformation.sin_addr.s_addr = INADDR_ANY;
sInformation.sin_port = htons(30000);

if (bind(this->socket, (SOCKADDR*) &sInformation, sizeof(sInformation)) != 0)
{
// error
return;
}

if (listen(this->socket, 10) != 0)
{
// error
return;
}

while (true)
{
this->DO();
}
}

void Network::DO()
{
SOCKADDR_IN sock_addr = {0};
socklen_t sock_addr_len = sizeof(sock_addr);

SOCKET s = accept(this->socket, (SOCKADDR*) &sock_addr, &sock_addr_len);
if (INVALID_SOCKET == s)
{
return;
}

cout << "Received connection from " << inet_ntoa(sock_addr.sin_addr);

// use s as needed. Don't forget to call close(s) or closesocket(s)
// when finished, depending on your platform...
}

关于C++ 套接字无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072512/

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