gpt4 book ai didi

c++ - Winsock send() 总是在服务器中返回错误 10057

转载 作者:太空狗 更新时间:2023-10-29 23:53:19 26 4
gpt4 key购买 nike

我正在尝试在连接时自动向客户端发送服务器请求,但我一直收到 10057 的 WSAGetLastError。我已经设置了从客户端到服务器的请求,没有任何问题,所以我不明白为什么我不能这样做相反 ?也许服务器必须等待客户端的第一次“发送”,但我不明白为什么会这样?

I'm using:
-asynchronous socket
-TCP
-s is a valid socket
-i'v looped RequestInfo for several passes but nothing changes
-select() returns 0
-datasize returns -1 with errcode 10057

谢谢你!!!

服务器:

//first - following the debugger  
FD_ACCEPT
int acc = accept(s, (struct sockaddr*)&fromm, &fromlenn); //success
if(acc <= 0)
{
eLOGG << "\nFAIL FD_ACCEPT: " << WSAGetLastError();
}
RequestInfo();

//then
RequestInfo()
{
stringstream ssConverter;
ssConverter.clear(); ssConverter.str(string());
ssConverter << "00aa"; //request signal

bool blogin = false;

eLOG << "signal is: *" << ssConverter.str() << "*";

int bufSize = ssConverter.str().length();

fd_set writefds;

struct timeval timeout;
timeout.tv_sec = 3;
timeout.tv_usec = 0;

FD_ZERO(&writefds);
FD_SET(s, &writefds);

int sel = select(s, NULL, &writefds, NULL, &timeout);
if(sel == SOCKET_ERROR)
{
eLOG << "\nselect - read fail: " << WSAGetLastError();
}
if(sel == 0)
{
eLOG << "\nselect - not connected: " << WSAGetLastError();
}

if (FD_ISSET(s, &writefds))
{
eLOG << "\n FD_ISSET";
}
eLOG << "\nauth socket is: " << s;
int dataSize = send(s, ssConverter.str().c_str(), bufSize, 0);
if(dataSize < bufSize)
{
eLOG << "\n FD_ISSET";
}
//...etc
}

最佳答案

您混淆了监听的服务器套接字 连接的套接字,后者是您从accept()acc 变量中。您不能通过服务器套接字发送或接收数据,因为它没有连接到任何东西。它的唯一目的是接受来自客户端的新连接。毕竟,服务器通常会处理多个客户端。

顺便说一句,连接的套接字不会从服务器套接字继承非阻塞状态,因此您需要在每次 accept() 之后标记它。

关于c++ - Winsock send() 总是在服务器中返回错误 10057,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11532311/

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