简单的.NET聊天服务器示例

4
我正在寻找适用于.Net程序员的简单的逐步通信教程。通过一些谷歌查询,我在net-informations.com上找到了"CSharp Communications"代码集合。只要我看到"How to C# Chat Server"示例,它就看起来相当不错。
作者提出了一个多线程服务器,使用HashTable容器将所有连接保存在服务器端的共享内存中。根据MSDN文档,用于广播消息的TcpClientNetworkStream类不是线程安全的,而该示例从多个服务器线程中使用它们。
我的问题是:
  1. 您能确认该示例是错误的吗?
  2. 应该如何处理,仅锁定广播方法(将其标记为关键部分)是否足够?
  3. 您能推荐一些套接字通信教程(.Net首选)吗?
2个回答

6

这篇文章虽然是我7年前写的,但涵盖面广,可以帮助你更好地理解TCP通信领域。请点击以下链接查看:

通用TCP/IP客户端服务器


3
我回答了他的问题:“你能推荐一些套接字通信教程吗(最好是 .Net)?” (Code-Project 不是我的网站!你这样评判我的动机非常侮辱人。) - G.Y
那个问题的部分在Stack Overflow上被认为是不相关的。请参阅Stack Overflow不是链接农场或搜索引擎。您也忽略了其他相关的问题部分。 - Oded
2
我认为他的问题符合网站的精神,我的回答也是如此 - 但你也有一定的观点,我可以理解为什么你会质疑我的动机 - 所以,我会让社区来决定。如果还有一个人认为我不当行并降低我的回答 - 那就这样吧 - 我很乐意将其删除。 - G.Y
如果您能添加一些摘要,我会点赞的。除此之外,这正是楼主所要求的。 - Michael Brown
谢谢Mike,你是指添加教程内容的摘要吗?我不确定我理解你的意思。 - G.Y

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

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

换句话说:不是线程安全,并不意味着只能绑定一个线程。


服务器端有许多线程向连接到服务器的许多客户端广播消息。 - kuszi
@kuszi 请看我的第一段:通过锁定避免两个线程在完全相同的时间访问同一个套接字。 - Richard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接