-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セグメンテーション違反を引き起こすのに十分な負の値になります。

この問題を修正するには、エラー状態を処理するコードを追加する必要があります(Whensendが値<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 に答える