命名管道包装库工作示例

3

我需要一个可行的示例,展示如何在简单客户端和服务器实现中使用[Named-Pipe-Wrapper]库v1.4。

我遇到了问题无法让Named-Pipe-Wrapper库v1.4在1个客户端和服务器之间发送/接收消息。我可以看到我的客户端已连接,但是在客户端和服务器之间发出的消息没有传输。

我做错了什么?

我选择这个库是因为它似乎很容易地在客户端和服务器之间传递强类型对象,而不需要处理序列化和反序列化这些对象。

以下是我为测试目的编写的代码:

class Program
{
    static void Main(string[] args)
    {
        var server = new NamedPipeServer<Message>("MyPipe");
        server.ClientConnected += delegate (NamedPipeConnection<Message, Message> conn)
        {
            Console.WriteLine("Client {0} is now connected!", conn.Id);
        };
        server.ClientMessage += 
            delegate (NamedPipeConnection<Message, Message> conn, Message message)
        {
            Console.WriteLine("Client {0} message received !", conn.Id);
            Console.WriteLine("Client {0} says: {1}", conn.Id, message.Text);
            conn.PushMessage(new Message() { Text = "HELLO from server" });
        };
        server.Start();

        var client = new NamedPipeClient<Message>("MyPipe");
        client.ServerMessage += 
            delegate (NamedPipeConnection<Message, Message> conn, Message message)
        {
            Console.WriteLine("Server says: {0}", message.Text);
        };
        client.Start();
        //client.WaitForConnection(1000);            
        client.PushMessage(new Message() { Text = "HELLO from client" });

        Console.ReadLine();
    }
}

public class Message
{
    public string Text { get; set; }
}

更新:如果我使用本机数据类型,则可以工作,但是当我使用具有本机类型的简单类时,它不起作用。
更新2:我编写的代码很好,但需要在Message类上添加[serializable]属性。

1
你尝试过调试你的代码吗? - Camilo Terevinto
1
是的,我只收到客户端已连接的通知,没有任何消息传递。你看到的和我不一样吗? - TheLegendaryCopyCoder
你确定命名管道服务正在运行吗? - Camilo Terevinto
我已经纠正并简化了代码。之前我在两个不同的项目上工作,一个是服务器,一个是客户端,并将这段代码组合在一起,以便stackoverflow开发人员可以轻松地复制我得到的结果。 更改后,我的结果仍然相同。 接下来我将尝试使用此库的旧版本。 - TheLegendaryCopyCoder
请说明您对此问题投反对票的原因。 - TheLegendaryCopyCoder
1个回答

5

您的 Message 类需要 [serializable] 属性。


这个很管用。 - TheLegendaryCopyCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接