c# - 从 URI 创建流对象(TCP、串行)的工厂方法

标签 c# sockets tcp serial-port

上下文

我正在编写一个与某些硬件通信的 C# 程序,一些通过直接串行链接,一些通过 TCP/IP 套接字。

串行和 TCP 套接字基本上是字节流,特别是如果您不处理硬件流控制等特定参数。

需要

常用代码:已解决

为了方便起见,我希望相同的代码能够通过简单的配置在串行和 TCP 流之间切换。

从软件设计的角度来看,这是在所有情况下获取一个公共(public)对象并仅在客户端代码中使用该对象的问题。在 C# 中,可以从以下位置获取 Stream 对象:

到目前为止一切顺利。

通过配置切换:缺少链接?

现在如何在配置中表示不同的情况? URI 会很好。

我知道 URI 不可移植,没关系,不同平台上的配置文件可能不同。

本次讨论Boost mailing page: Re: [boost] Re: [network] An RFC - updated提到 URL 如何表示此类流:

server.address=tcp4:/www.example.com:5757
server.address=com1:/57600,n,8,1

20-sim 4C Builds说:

serial://com1?baud=115200

喜欢Serial Connection Problem on IF2 with advanced BR... - Intermec Community .


编辑:阅读RFC 2396 - Uniform Resource Identifiers (URI): Generic Syntax看起来下面的字符串会更一致:

serial://com1?baud=9600
serial:///dev/ttyS0?baud=9600
tcp://servernameorip:port

(结束编辑)


如果配置文件提及带有 tcp 或串行参数的 URI 并让代码实例化正确的具体类,那就太好了。在设计模式中,这称为工厂方法。

它会像这样使用:

Stream mystream1=MyFactoryClass.GetStream("com1:/57600,n,8,1");
Stream mystream2=MyFactoryClass.GetStream("tcp4:/www.example.com:5757");

我无法在 Internet 或文档中找到它。提到串行端口的 URI 似乎很少见,另一个例子:Using Network Printers - CUPS.org

问题

有谁知道这样的开源工厂类是否已经存在?

做起来并不长,但如果它已经存在,最好不要重新发明它。

最佳答案

它不存在,但我相信内置的 Uri 类支持自定义方案。

考虑像 .NET Framework 通常那样做。配置文件将指定类型名称和一些字符串参数。我认为这里不需要 URI。

关于c# - 从 URI 创建流对象(TCP、串行)的工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25555619/

相关文章:

c - 如何在 c 中使用 openssl 创建聊天服务器

Python urllib3 : close idle connection after some time

tcp - 在 docker 中尝试 docker 获取 TCP 连接被拒绝错误

c# - 有没有办法在 C# 的子类中强制存在静态成员?

c - 如何在 C 和 Linux 中检查套接字的可用数据量

C# 任务未按预期工作。奇怪的错误

java - CTRL-C 在 Python 中的行为不同

javascript - 通过javascript通过tcp ip发送命令

c# - 如何在不下载整个文件的情况下计算 VBR mp3 的比特率?

c# - 关于套接字编程的 APM、EAP 和 TPL