【问题标题】:How to dispatch send/receive data using C# socket tcp connection如何使用 C# 套接字 tcp 连接分派发送/接收数据
【发布时间】:2014-07-13 10:31:50
【问题描述】:

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

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

如果设备正在发送数据,而我需要向设备发送数据怎么办?我怎样才能调度这样的流量?我需要一个线程来阅读和一个线程来写作吗?是否可以在每个设备上使用单线程来处理这个问题(最多可以连接数百个设备)?

我正在使用Socket.ReceiveSocket.Send 方法。

【问题讨论】:

    标签: c# sockets


    【解决方案1】:

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

    协议必须支持这一点。当您发送数据时,不清楚何时接收。该协议必须允许您区分正常数据和响应。您可以为每条消息添加一个标头,该标头有一个布尔字段来表明这一点。

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

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

    将连接多达数百个设备

    这意味着您需要有数百个未完成的读取。这可以通过每个套接字一个线程来实现。另一方面,这开始成为异步 IO 的一个很好的用例。了解如何将 async/await 与套接字一起使用。如果因为您在 VS2010 上而无法使用 async/await,请使用其他方法之一使用套接字实现异步 IO。

    【讨论】:

    • 有道理。协议(尖晶石)支持响应的识别。非常感谢。
    猜你喜欢
    • 2013-07-04
    • 2012-09-23
    • 1970-01-01
    • 2021-10-23
    • 2019-05-07
    • 2016-05-09
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多