Winsock发送功能起作用

时间:2011-11-29 04:44:53

标签: c++ string winsock

这似乎是一个非常简单的问题,但对我来说这是一个很大的问题。过了一会儿,我回到了我的一个项目,最奇怪的是,每当我尝试添加一个send()函数调用时,数据永远不会传输(我通过putty发现)。旧函数调用工作,当我添加新函数时,它不起作用。任何人都可以告诉我什么coudl导致第一个函数调用工作而不是第二个。它们紧挨着。我将数据传输到Java applet,如果这有帮助,但putty说这是一个服务器问题。这是代码,其中connsock是客户端的套接字ID号。

 string testsendbuf = "Hello there\r\n";
 string addbuf = "Hello again\r\n";
send( connsock, testsendbuf.c_str(), testsendbuf.length(), 0);
send( connsock, addbuf.c_str(), addbuf.length(), 0 );

第一部分再次起作用但第二部分不起作用。什么可能导致这种情况?

我测试了错误代码,没有,转移的字节是准确的

1 个答案:

答案 0 :(得分:0)

如果您的套接字标记为Non-Blocking,则其他发送仍有可能正在进行中,并且您收到错误WSAEWOULDBLOCK

更改为阻止套接字或尝试循环(示例显示工作原理,生产代码不同):

int pos =0;
for(;;)
{

    pos += send(connsock,addbuf.c_str() + pos ,addbuf.size() - pos,0);

    if (pos == addbuff.size()
        break;
    int nError=WSAGetLastError();
    if(nError!=WSAEWOULDBLOCK&&nError!=0)
    {
        std::cout<<"Winsock error : "<<nError<<"\r\n";
        shutdown(connsock,SD_SEND);
        closesocket(connsock);
        break;
    }
    Sleep(1000);
}

附注:将使用您要发送的所有内容构建缓冲区。而不是背靠背调用send()