在Recv()上拒绝连接,而发送似乎工作正常
Connection Refused on Recv(), while send seems to work fine
我正在尝试创建一个连接到我提供的服务器/端口-在建立连接后,我能够向它发送ping数据包(至少我认为我能够,因为send()似乎返回正确的字节数),但是当我尝试之后recv()时,调用失败说
"Error on Receiving .. Connection Refused"
关于为什么发送不会给出一个错误,但接收会吗?下面是导致我失败的部分代码——它在自己的线程上运行。TCP连接在另一个线程上建立,套接字描述符被传递给这个线程(下面称为m_sockfd)。
void ConnectionManager::operator()()
{
int rc = 0, numBytes=0 ;
char reply[256] ;
// Send a ping
char PingPacket[23] ;
PreparePingPacket(PingPacket) ;
numBytes = send(m_sockfd,PingPacket,23,0);
if(numBytes == -1)
{
fprintf(stderr, "Error on Sending Ping .. n") ;
return ;
}
if(numBytes < 23)
{
fprintf(stderr, "Didn't send the whole Ping Request .. %d n", numBytes) ;
}
numBytes = recv(m_sockfd, reply, 256, 0) ;
if(numBytes == -1)
{
fprintf(stderr, "Error on Receiving .. %s n", strerror(errno)) ;
return ;
}
ParsePacket(reply, rc) ;
}
我可以粘贴实际连接的代码,但我想如果它有错误,那么发送将永远不会开始?
感谢阅读-任何帮助都很感激!
发现了——这是我这边非常愚蠢的事情。问题是我的getaddrinfo()语句。我在某种程度上传递了"结构addrinfo"提示后,将其设置为全部0。这导致端点在某种程度上无效。在改变结构中的值之前放置memset,这个问题就消失了。还不确定信号是怎么发送出去的,但这就是问题所在。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- Winsock recv 循环无法正常工作
- 套接字发送数据,但 recv 程序无法正常工作
- 在Recv()上拒绝连接,而发送似乎工作正常
- C/pp套接字,recv()/send()只在gdb下工作
- -客户端-服务器应用程序-服务器端的recv()可以正常工作,但客户端的recv()会阻塞程序
- 选择返回零,但有更多的数据和recv工作太