我目前有一台服务器和两台与之通信的客户端。每次客户端连接到服务器时,我将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();
但在特定客户端上没有任何内容。有什么指针吗?
答案 0 :(得分:1)
你没有写任何东西。
empty
是一个空数组,您对Write
的调用使用其长度(0
)作为要写入的字节数(请参阅the docs - 您&# 39;重新指定count
为0
)。
你可能想做这样的事情:
var bytesToWrite = messageFormatting(empty, 0x14, DCSP);
pumpStream.Write(bytesToWrite, 0, bytesToWrite.Length);