-1

我试图编写一个小代码在 Windows 上通过网络发送文件,但它似乎无法正常工作。这是我的代码:

char *arrFile = readFile("test.exe");
int fileSize = getFileSize("test.exe");
int sentSize = 0;
int justSent;

while(sentSize < fileSize) {
    justSent = send(sock, arrFile + sentSize, fileSize - sentSize, 0);
    sentSize += justSent;
}

几次循环后发送函数出错,我不知道为什么,有人可以告诉我原因(以及解决方案:D)吗?

更新

我正在使用非阻塞套接字并收到“WSAEWOULDBLOCK”错误,但它在错误后仍然不发送任何内容,直到客户端发回一些东西:-(

上面的代码是 C,但也是 C++ :D

4

1 回答 1

2

看起来该功能send无法正常工作。它返回一个 -1,然后将其添加到justSent. 经过几次迭代后,justSent负数足以导致分段错误。

要解决此问题,您应该添加代码来处理错误情况(send返回值 < 0 时)。

这样的事情将是一个好的开始:

while(sentSize < fileSize) 
{
    justSent = send(sock, arrFile + sentSize, fileSize - sentSize, 0);
    if(justSent < 0)
    {
        printf("Error!\n");
        break;
    }
    sentSize += justSent;
}
于 2012-12-16T07:41:40.833 回答