您可以将Stream对象传递给要写入该特定流的方法吗?

时间:2016-04-20 13:52:41

标签: c# networking stream client

我目前有一台服务器和两台与之通信的客户端。每次客户端连接到服务器时,我将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();但在特定客户端上没有任何内容。有什么指针吗?

1 个答案:

答案 0 :(得分:1)

你没有写任何东西。

empty是一个空数组,您对Write的调用使用其长度(0)作为要写入的字节数(请参阅the docs - 您&# 39;重新指定count0)。

你可能想做这样的事情:

var bytesToWrite = messageFormatting(empty, 0x14, DCSP);
pumpStream.Write(bytesToWrite, 0, bytesToWrite.Length);