簡體   English   中英

無法通過郵件發送wchar_t數組

[英]Can't send wchar_t array through mailslot

我無法發送大於420字節的數據塊。 例如,如果我嘗試發送421 bytes ,我無法用ReadFile讀取它。 如果我用GetMailslotInfo( handleRead, 0, &msgSize, 0, 0 );檢查maislot信息GetMailslotInfo( handleRead, 0, &msgSize, 0, 0 ); 然后msgSize將始終為-1

所以這對我來說永遠不會有用:

err = WriteFile( handleWrite, wcharArrayToSend, 421, &numBytesWritten, NULL );

有誰知道這種行為的原因? 這是正常行為嗎?

根據MSDN關於郵件槽的文檔

郵件消息中的數據可以是任何形式,但在計算機之間發送時不能大於424字節。

要在計算機之間發送大於424字節的消息,請改用命名管道Windows套接字

我不確定你做錯了什么,但是mailslots絕對可以處理大於421字節的消息。 這是一些測試代碼(成功運行):

服務器:

#include <windows.h>
#include <stdio.h>

int main() {    
    HANDLE mailslot = CreateMailslot("\\\\.\\mailslot\\myslot", 
        0, 
        MAILSLOT_WAIT_FOREVER, 
        NULL);
    if (mailslot == INVALID_HANDLE_VALUE) {
        fprintf(stderr, "Unable to create mailslot.");
        return 1;
    }

    char buffer[2048];
    OVERLAPPED ovlp = {0};

    ovlp.hEvent = CreateEvent(NULL, false, false, NULL);   
    if (ovlp.hEvent == NULL) {
        fprintf(stderr, "Unable to create Event.");
        return 2;
    }

    DWORD read;

    do { 
        ReadFile(mailslot, buffer, sizeof(buffer), &read, &ovlp);
        buffer[read] = 0;
        WaitForSingleObject(ovlp.hEvent, INFINITE);
        printf("%s\n", buffer);
    } while (strcmp(buffer, "exit"));    
    return 0;
}

客戶:

#include <windows.h>
#include <stdio.h>

int main() {    
    HANDLE mailslot = CreateFile("\\\\.\\mailslot\\myslot", 
        GENERIC_WRITE, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, 
        OPEN_ALWAYS, 
        0, 
        NULL);

    if (INVALID_HANDLE_VALUE == mailslot) {
        fprintf(stderr, "Unable to open mailslot.\n");
        return 1;
    }
    char buffer[2048];
    DWORD written;

    for (int i=0; i<1024; i++)
        buffer[i] = 'A' + (i%26);
    buffer[1023] = '\0';
    size_t len = strlen(buffer);

    WriteFile(mailslot, buffer, len, &written, NULL);    
    WriteFile(mailslot, "exit", 4, &written, NULL);
    return 0;
}

結果:

E:\C\source>mailslot
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZAB
CDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD
EFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEF
GHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGH
IJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ
KLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL
MNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP
QRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQR
STUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRST
UVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWX
YZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI
exit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM