如何使用c# socket tcp连接调度发送/接收数据

本文关键字:数据 调度 何使用 socket tcp 连接 | 更新日期: 2023-09-27 18:12:36

我正在为IO设备编写套接字客户端,这是tcp服务器。我能够连接并监听服务器定期发送的数据。但有时,我需要向服务器发送一些指令并读取其响应。

处理此任务的正确方法是什么,以便能够侦听传入数据,并在发出指令后接收响应,并知道接收到的数据的响应是哪一部分?

如果设备正在发送数据,而我需要发送数据给设备怎么办?我该如何调度这样的流量?我需要一个线程读,一个线程写吗?是否有可能使用每个设备的单线程来处理这个问题(将有多达数百个设备连接)?

我使用Socket.ReceiveSocket.Send方法。

如何使用c# socket tcp连接调度发送/接收数据

处理这个任务的正确方法是什么,要能够倾听传入数据和指令发送后,接收响应和回复知道,响应是接收数据的哪一部分吗?

协议必须支持此操作。当你发送数据时,不清楚什么时候会被接收。协议必须允许您区分正常数据和响应。您可以在每条消息的头部加上一个布尔值字段来表示这一点。

如果设备正在发送数据,而我需要发送数据给设备怎么办?

您可以在同一个套接字上并发地发送和接收。这不是问题。你通常会有一个线程来阅读。你可以按需写作。不需要专门的线程。

将有多达数百个设备连接

这意味着您需要有数百个未完成的读取。这对于每个套接字一个线程是可行的。另一方面,这开始成为异步IO的一个很好的用例。了解如何在套接字中使用async/await。如果您使用的是VS2010,因此无法使用async/await,请使用其他方法使用套接字实现异步IO。