首页 > 解决方案 > 我没看到什么?我对 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);

标签: c++while-looptcprecv

解决方案


推荐阅读