【问题标题】:Is multithreading dangerous in sockets writing?套接字编写中的多线程危险吗?
【发布时间】:2021-08-23 04:47:12
【问题描述】:

我正在创建一个基于 Tcp网络协议,并且我正在通过 C# 使用 berkeley 套接字
当两个线程尝试同时通过 socket.send 方法发送数据时,套接字缓冲区是否会混淆?
我应该使用 lock 来一次访问一个线程吗?

【问题讨论】:

  • 这个套接字是从服务器到客户端的单向数据流吗?
  • 这个协议是基于请求和响应的吗?
  • 好吧,我的协议是基于这条规则的。 [开始][消息大小][消息本身][结束]。是的,它是一个客户端服务器。但有什么关系呢?对于此解决方案,我认为客户端服务器或服务器到服务器或客户端到客户端之间没有任何不同。
  • 不需要请求响应。它只是发送数据。它用于在线游戏。

标签: c# sockets networking tcpclient


【解决方案1】:

根据MSDN,Socket 类是线程安全的。因此,这意味着您不需要锁定 send 方法,您可以安全地在不同线程上发送和接收。但请注意,不能保证顺序,因此如果您在一次调用 send 方法而不是分块调用时发送所有数据,则不会混合数据。

除此之外,我建议您锁定并刷新它,以防您不希望服务器在多个并发请求之间交换响应。但这似乎不是这种情况。

【讨论】:

  • 非常感谢,有时我会忘记自己阅读资源。锁定,是的,我必须锁定。按顺序发送消息的原因。
猜你喜欢
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多