【发布时间】:2016-04-20 13:52:41
【问题描述】:
我目前有一个服务器和两个与之通信的客户端。每次客户端连接到服务器时,我都会将 Stream 实例作为值存储,并将客户端 ID 作为键存储在并发字典中。
private static ConcurrentDictionary<string, NetworkStream> pumpIDAndStream = new ConcurrentDictionary<string, NetworkStream>();
//then later in the program
pumpIDAndStream.AddOrUpdate(clientID.ToString(), stream, (k, v) => stream);
然后我使用此方法尝试根据存储在字典中的流对象向特定客户端实例发送消息:
private void proceedPump(byte[] b_recievedLine)
{
string s_messageBody = DESDecrypt(b_recievedLine, DCSP);
string[] delim = { " " };
string[] strings = s_messageBody.Split(delim, StringSplitOptions.RemoveEmptyEntries);
NetworkStream pumpStream = pumpIDAndStream[(strings[0])]; //strings[0] is the specific client ID
byte[] empty = System.Text.Encoding.ASCII.GetBytes("");
pumpStream.Write(messageFormatting(empty, 0x14, DCSP), 0, empty.Length);
pumpStream.Flush();
}
调试后,它确实到达了pumpStream.Flush();,但在特定客户端上没有任何内容。有什么指点吗?
【问题讨论】:
-
@CharlesMager Empty 只是消息体,messageformatting 方法返回一个字节数组,其前缀为消息类型(0x14)的标头。 Empty 只是空的,因为我不想处理传递共享密钥进行解密,真正的事情是在标头中发送 0x14 字节。
-
您仍在使用它的长度作为计数参数 - 请参阅下面的答案。
标签: c# networking stream client