c++ - 我没看到什么?我对 recv 函数的理解是错误的,还是这个 while 循环做了一些意想不到的事情?
问题描述
给出一个想法,我的程序通过 tcp/ip 与一个 simatic sps 进行通信,为此我使用一个套接字来发送和接收数据。SPS 获取数据,用它填充数据,当它准备好时,它会发回数据。现在,如果我在 SPS 将数据发回后实现并理解了所有这些,那么这个 while 循环应该转换数据并将其发送到我的 csv 函数。事情是在第一次尝试中,当 SPS 获得信息时,它完成了它的工作并发送了数据,这个 while 循环甚至没有到达 csv 函数,因此永远不会退出循环。如果我在 SPS 已经完成并将数据发送到 csv 函数并离开循环时开始该过程。我可以说 recv 没有发出错误,因为这会出现在 SPS 上并出现死连接。
也许我的问题是我试图只使用一个套接字?谁能证实这个假设?我还没有发现任何我不应该使用一个套接字来发送和接收。
// Wait for response
bool active = true;
do
{
char buf[4096];
ZeroMemory(buf, 4096);
int bytesReceived = recv(sock, buf, 4096, 0);
if (bytesReceived == SOCKET_ERROR) {
closesocket(sock);
WSACleanup();
}
if (bytesReceived > 0)
{
short int* ibuf = (short int*)buf;
std::vector<int> InputData;
for (int i = 0; i < bytesReceived / 2; ++i, ++ibuf)
{
short result = ntohs(*ibuf);
InputData.push_back(result);
}
if (CsvWriter(InputData) == 0) {
active = false;
}
}
} while (active == true);
解决方案
推荐阅读
- python - 以编程方式创建 pytest 固定装置
- niftynet - 使用 NiftyNet 进行分类
- theorem-proving - 如何使用 Lean 消除代数表达式中的括号
- excel - EXCEL VBA:在创建单词列表时计算单词出现次数
- c++ - 为什么 std::allocator::deallocate 不是 noexcept?
- python - 如何等待 Python asyncio call_later 完成所有待处理
- java - Swing Timer 的暂停和恢复无法正常工作
- c - 如何迭代或递归区分结构,例如 C/C++ 结构,因为它发生变化
- sql-server - 使用 SQL Server Management Studio 备份 UI 执行 RDS SQL Server 数据库实例的本机备份
- php - preg_match 正则表达式匹配可能存在或不存在的字符串的一部分