C# TCP/IP 客户端发送从串行端口接收到的数据 - 建议

标签 c# multithreading sockets tcp serial-port

目前我正在开发一个应用程序,该应用程序通过串行端口从 RFID 读卡器接收数据。数据,然后数据应该通过 TCP/IP 发送到服务器。

我已经让这两项工作都在工作,但不是同时进行。我可以从卡中读取 ID,还可以向服务器发送一些文本。但我想征求您的建议,这两件事协同工作的最佳解决方案是什么。

目前我有 TCP/IP 使用和串行使用两个类别。从主类中,我创建两个类的对象并启动一个从串行端口读取数据的线程。

我应该尝试这样的事情吗?

在类中,我将仅创建串行使用对象并调用处理读取的线程。在该读取线程内部,我将调用一个新线程,该线程将打开 TCP/IP 连接并发送从串行端口收到的数据。

另一种类似的方法会从主类打开两个连接,但它会从串行端口接收线程启动 TCP/IP 发送线程(通过已经打开的连接)。

我在线程方面没有太多经验,因此我向其他软件开发人员寻求帮助。谢谢! (如果这有帮助,我可以在此处粘贴部分代码)。

更新:

这就是提示,我会仔细研究您的建议。我想这是个好主意,但正如我所说,我在线程方面没有太多经验。如果我在这些类中创建单独的线程,并且它们都使用相同的对象,比如说 Message 类的对象,我会在 COM 处理线程中创建新对象,并且 TCP/IP 处理线程将使用该对象,那么它会工作吗?通过 TCP/IP 发送数据?我可以像使用 List 一样创建 Message 类对象的队列吗?另外,我如何将类中一个线程中创建的对象队列传递给另一个线程

最佳答案

将两种不同的通信方法抽象为单独的类是很好的设计,所以我会坚持这样做。

不要在主类中处理线程,而是让每个通信类处理自己的线程管理并通过共享 threadsafe queue 在它们之间进行通信。 。

然后,您的串行通信对象可以处理与串行端口的通信、读取数据并将该数据放入队列中。 TCP 通信对象可以处理连接、重新连接、断开连接等...并使用队列中的数据并将其发送到套接字并在网络上发送出去。

您的主类可以创建队列并在同一队列实例中传递两个通信对象。

关于C# TCP/IP 客户端发送从串行端口接收到的数据 - 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139247/

相关文章:

java - TCP 连接 - 服务器仅在关闭套接字后发送消息

c++ - Qthread : worker for I/O queue

java - 使用 php 作为客户端和服务器应用程序之间的媒介

c# - 如何防止多次打开我的应用程序?

c# - 仍然需要帮助理解为什么 Ninject 可能比手动 DI 更好

c++ - std::thread() 和 std::ref() 在类内部使用时导致构建错误

python - 在 Python 中创建一个简单的聊天应用程序(套接字)

c# - MVC WebGrid 动态内容

c# - 在DTO和域对象之间进行映射时,如何使该过程对我的存储库透明?

ios - Swift 3 单例管理器套接字连接