【问题标题】:Winsock sending message twice c++Winsock两次发送消息c ++
【发布时间】:2018-06-18 00:05:18
【问题描述】:

所以我的问题是,当我在 do-while 循环中使用 WinSock“发送”时,PUTTY 会收到两次。

char sendBuffer[] = "this is my message to the world";
do
{
    iResult = recv(clientSocket, recvBuffer, DEFAULTBUFFERLEN, 0);
    if(iResult > 0)
    {
        std::cout << "Received bytes: " << iResult << std::endl;

        std::cout << recvBuffer << std::endl;
        //Successful receive, now send back a message
        Message("Now it's your turn to say something!");
        //std::cin.getline(sendBuffer, DEFAULTBUFFERLEN);
        std::cin.get();
        iSendResult = send(clientSocket, sendBuffer, sizeof(sendBuffer), 0);
        if(iSendResult == SOCKET_ERROR)
        {
            Message("Error with send. ERROR: " + WSAGetLastError());
            closesocket(clientSocket);
            WSACleanup();
            return 8;
        }

        std::cout << "Bytes sent: " << iSendResult << std::endl;
    }
    else if(iResult == 0)
    {//Nothing has been received, client has disconnected
        Message("Closing connection with client");
    }else
    {// there was an errror and the connection needs to be closed
        Message("Error Receiving. Error: " + WSAGetLastError());
        closesocket(clientSocket);
        WSACleanup();
        return 9;
    }

}while(iResult > 0);

代码运行良好,编译和整体运行顺利,唯一的问题是发送调用由于某种原因发送了两次。

我在此之前调用一次发送只是为了说“欢迎来到服务器”,但实际上只发送一次。只有这一位发送两次。 我正在使用 mingw 进行编译,这是我的构建脚本

g++ server.cpp -o server -lws2_32 -lwsock32

编辑:根据我的调试器,代码在收到来自客户端的初始消息时运行一次,但随后再次运行并在再次运行时收到“\r\n”,因此重复消息无需等待新消息客户留言

【问题讨论】:

  • 你调试过这个吗?你确定你的循环没有迭代两次吗?
  • 所以,是的,它迭代了两次,但只等待接收信息,在这两次迭代中一次
  • 所以你是 receiving 两次,所以你的接收缓冲区不够大,无法容纳 Putty 发送的整个消息。所以放大一下。 Winsock::send() 不会发送两次。
  • 看一下编辑,问题是有一条额外的消息来自Putty,它读取的接收消息只是“\r\n”

标签: c++ sockets network-programming winsock2


【解决方案1】:

所以经过一些调试后我发现了问题,当你按下回车时,腻子会发送一条额外的消息(或类似的东西。所以解决方案是使用带有这些条件的 if 语句包装处理接收到的消息的代码:

if((std::string)recvBuffer != "\r\n" || (std::string)recvBuffer != "\n")

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 2017-07-22
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多