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

时间:2013-10-02 14:22:22

标签: c# multithreading sockets tcp serial-port

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

我已经把这两件事都搞定了,但不是在同一时间。我可以从卡读取ID,我也可以发送一些文本到服务器。但是我想问你一些建议,那两个合作的最佳解决方案是什么。

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

我应该尝试这样的事吗?

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

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

我没有太多的线程经验,所以这就是为什么我要求你帮助软件开发人员。谢谢! (如果这会有所帮助,我可以在这里粘贴一些代码部分。)

更新:

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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