.Net Socket增强功能,支持ACK和Chat
本文关键字:ACK Chat 支持 Socket 增强 功能 Net | 更新日期: 2023-09-27 18:28:54
我有一个服务器,它可以处理许多多个客户端请求。
服务器使用Socket
和TcpClient
——对于每个客户端,它都会打开一个新线程。
每个客户端都向服务器发送数据和服务器响应。
但是我如何"发送数据":
-
客户端:发送一个字节,表示:"我想发送数据"
-
服务器:发送Ok I agree(1字节ack)
-
客户端:发送字节数-数据的长度
-
服务器:发送Ok,我可以处理
-
客户端:发送整个数据
-
服务器:发送Ok
我也可以发送文件
一切都很顺利。
问题
问题来了:
这些命令(我已经写了)是用户操作。
现在我需要添加一个聊天到这个动作屏幕
这不是问题:
我将打开一个新的线程,它将始终处于消息的"侦听模式"
但是:
那个总是监听的线程也会拦截来自服务器的Ack消息(我在上面写过)!
我不想只为聊天打开一个新的连接频道。
EVen如果我添加一个响应类型(ACK或CHAT_MESSAGE),这将是一个问题,因为用户操作的响应将最终出现在侦听聊天线程中。
我如何(理想地)解决这个体系结构问题?我是不是走错了方向?
如果你不想为聊天打开新的连接,你将不得不处理一个更复杂的有线协议:
你必须以一种允许服务器发现两者中哪一个正在通过的方式发送帧数据和聊天消息。根据接收到的数据,需要对其进行不同的处理。
使用多个线程从同一个TCP连接读取是没有意义的。TCP不是基于消息的。传入的字节可以任意分散在线程之间。一个线程需要找出要到来的数据类型并进行调度。