C++ Winsock发送函数运行正常

C++ Winsock发送函数运行正常,c++,string,winsock,C++,String,Winsock,这似乎是一个非常简单的问题,但对我来说却是一个很大的问题。过了一会儿,我又回到了我的一个项目,最奇怪的是,每次我尝试添加send()函数调用时,数据都不会被传输(我通过putty发现)。当我添加新的函数时,旧的函数调用就不起作用了。谁能告诉我是什么导致第一个函数调用工作,而不是第二个函数调用工作。他们就在一起。如果有帮助的话,我会将数据传输到Java小程序,但putty说这是服务器问题。下面是代码,其中connsock是客户端的套接字id号 string testsendbuf = "Hell

这似乎是一个非常简单的问题,但对我来说却是一个很大的问题。过了一会儿,我又回到了我的一个项目,最奇怪的是,每次我尝试添加send()函数调用时,数据都不会被传输(我通过putty发现)。当我添加新的函数时,旧的函数调用就不起作用了。谁能告诉我是什么导致第一个函数调用工作,而不是第二个函数调用工作。他们就在一起。如果有帮助的话,我会将数据传输到Java小程序,但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 );
同样,第一个有效,但第二个无效。这是什么原因造成的


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

如果您的套接字标记为
非阻塞
,则很有可能另一次发送仍在进行中,并且您收到的错误为
WSAEWOULDBLOCK

更改为阻塞套接字或尝试循环(示例演示如何工作,生产代码不同):

int pos=0;
对于(;;)
{
pos+=send(connsock,addbuf.c_str()+pos,addbuf.size()-pos,0);
if(pos==addbuff.size()
打破
int nrror=WSAGetLastError();
如果(错误!=WSAEWOULDBLOCK&&n错误!=0)
{

std::你能检查
send
调用的返回值吗?对不起,你是如何检查的…我在谷歌上找到了它,但我仍然不知道如何检查。它是否像resultvalue==WSAEACCES
send
返回发送的字节数,或者
SOCKET\u ERROR
。如果是
SOCKET\u ERROR
,你就会得到实际的错误使用
WSAGetLastError
编码。中列出了所有可能的错误。通过执行
if(send([params])==SOCKET_ERROR)检查返回值{cout返回值为零表示它没有发送数据,也没有发送数据失败。检查长度参数是否不为零。当我检查send()的错误值时我得到一个0作为错误值,并且认为0意味着没有错误。此外,当我检查返回值时,我得到了所有有用源代码的正确ByTestHank数,但考虑到当您尝试发送
“Hello here\r\n Hello再次\r\n”时会发生什么
一次?;第一次之后的一切\r\n都被忽略。问题不在于此代码,而在于。是另一端,还是另一端期望有所不同。
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);
}