我是 C# 新手,过去主要完成基于 Web 的编码。我正在创建一个将与单个客户端通信的 TCP 服务器。我知道我需要多个线程,因为我不希望我的程序阻塞等待连接(或读取数据、发送等)。
到目前为止,我已经编写了一个简单的测试应用程序,它带有一个 GUI 和一个用于与客户端通信的类。主 GUI 类创建通信类的实例。我在 BackgroundWorker 中有 socket.accept 调用,我试图将连接的套接字传递回 RunWorkerCompletedEventArgs.Result 中的通信类。这一直没有奏效。我可以中断 DoWork 方法并查看套接字已连接。然后我将 DoWorkEventArgs.Result 设置为连接的套接字并尝试将其传递回通信类。在 RunWorkerCompleted 方法中,套接字不再连接。
我可能对如何为单个客户端实现 TCP 服务器有错误的想法。我看到的所有示例都是为多个客户端设计的,但我将处理单个客户端。我无法控制客户端,只是尝试与它进行通信。
如何将连接的套接字从 BackgroundWorker 传递回主类,或者我需要一种更好的代码结构方式。
更新:
我不控制客户端。它是一种嵌入式 Linux 设备。该协议非常简单。后跟数据字节的大小标头。
目标是 .NET 2.0。WCF 似乎仅在 .NET 3.0 及更高版本上可用。
更新:
我的代码将向客户端发送命令并接收回数据。我的代码将是一个需要持续发送/接收数据的长时间运行的应用程序。