套接字应用程序无法正常工作

时间:2012-12-16 07:00:20

标签: c++ c sockets winsock winsock2

我尝试编写一个小代码来在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

1 个答案:

答案 0 :(得分: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;
}