Отправил массив через канал C ++ в C # - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть сервер PIPE на C ++, и я пытаюсь отправить массив int клиенту c #, но когда я запускаю клиент, мой сервер закрывается, даже состояние соединения успешно.Проблема в том, что я запускаю сервер и затем запускаю клиент, но мой клиент подключается к серверу, мой сервер закрывается

C ++ Sever:

 #include <stdio.h>
#include <stdint.h>
#include <winsock.h>
#include <string>

// see https://msdn.microsoft.com/en-us/library/bb546085(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
// for information on creating pipe clients and servers in c++

using namespace std;


int wmain(int argc, wchar_t* argv[]) {

    auto pipename = "\\\\.\\pipe\\pipey"; // can be any name, but must start '\\.\pipe\'
    printf("Create pipe '%s'\r\n", pipename);
    auto pipeHandle = CreateNamedPipe(pipename,
        PIPE_ACCESS_DUPLEX,
        PIPE_TYPE_MESSAGE | PIPE_WAIT,
        1,  // # instances
        64, // out buff
        64, // in buff
        0,  // timeout, 0 = default of 50ms
        NULL); // security attrs

        const size_t  *myArray[70];

        DWORD numBytesWritten = 0;


        printf("Waiting for pipe connect\r\n");
        if (ConnectNamedPipe(pipeHandle, NULL)) {
            printf("Pipe connected\r\n");

            for (size_t i = 0; i < 40; i++)
            {
                myArray[i] += i;

            }
            WriteFile(
                pipeHandle, // handle to our outbound pipe
                myArray, // data to send
                size_t(myArray) * sizeof(size_t), // length of data to send (bytes)
                &numBytesWritten, // will store actual amount of data sent
                NULL // not using overlapped IO
            );


        }else {
            printf("Pipe connect failed\r\n");
        }


    CloseHandle(pipeHandle);
    printf("Exiting program\r\n");
    return 0;
}

C # client:

        static void Main(string[] args)
    {
        var pipename = "pipey";
        var pipeClient = new NamedPipeClientStream(pipename);
        Console.WriteLine("Connecting to server pipe '{0}'", pipename);
        pipeClient.Connect();

        using (StreamReader rdr = new StreamReader(pipeClient, Encoding.Unicode))
        {

                System.Console.WriteLine(rdr.ReadLine());

        }
        Console.ReadKey();
    }

Проблема в том, что я запускаю сервер, а затем запускаю клиент, но мой клиент подключается к серверу, мой сервер закрывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...