【问题标题】:.NET Simple chat server example.NET 简单聊天服务器示例
【发布时间】:2012-05-14 09:35:11
【问题描述】:

我正在为 .Net 程序员寻找简单的分步通信教程。经过一些谷歌查询,我在 net-informations.com 找到了“CSharp Communications”代码集合。只要我到达“How to C# Chat Server”示例,它看起来就相当不错了。

作者建议使用 HashTable 容器的多线程服务器,以将所有连接保留在服务器端的共享内存中。根据 MSDN 文档 TcpClientNetworkStream 用于广播消息的类不是线程安全的,而示例从多个服务器线程中使用它们。

我的问题是:

  1. 你能确认这个例子是错误的吗?
  2. 应该怎么做,锁定广播方法是否足够(标记为临界区)?
  3. 能否推荐一些socket通信教程(.Net首选)?

【问题讨论】:

    标签: c# sockets


    【解决方案1】:

    它并不像我差不多 7 年前写的那样完美,但它涵盖了并将让您对 TCP 通信领域有很好的了解:

    Generic TCP/IP Client Server

    【讨论】:

    • 我回复了他的问题:“你能推荐一些socket通信教程(.Net首选)吗?” (Code-Project 不是我的网站!你会这样判断我的动机,这太侮辱了。)
    • 好吧,这部分问题在 Stack Overflow 上被认为是题外话。见Stack Overflow is not a Link Farm or Search Engine。您还忽略了问题的其他部分。
    • 我认为他的问题符合网站的精神,我的回答也是如此 - 但你也有道理,我明白你为什么会质疑我的动机 - 所以,我会让社区来决定。如果还有 1 个人认为我不合时宜并降级我的答案 - 就这样吧 - 我很乐意将其删除。
    • 如果您能礼貌地添加一些摘要,我会投赞成票。除此之外,这正是行动所要求的。
    【解决方案2】:

    根据 MSDN 文档,用于广播消息的 TcpClient 和 NetworkStream 类不是线程安全的,而示例从多个服务器线程中使用它们。

    这是正确的;但它是关于并发访问的。如果每个线程依次使用实例(例如,使用锁来控制访问),则可以使用不同的线程

    换句话说:非线程安全并不意味着绑定到单个线程。

    【讨论】:

    • 服务器端有很多线程向连接到服务器的多个客户端广播消息。
    • @kuszi 请参阅我的第一段:避免两个线程通过锁定同时访问同一个套接字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 2016-05-29
    • 2011-09-23
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多