在处理TCP客户端时,尤其是当流必须加密时,除非CryptoCtream
关闭,否则将不会传递消息,这会导致内部流不可读,因为它将被处理。
例如
TCPClient client = new TCPClient("some ip", 1234);
using(var i = new CryptoStream(client.GetStream(), myEncryptor(), CryptoStreamMode.Write) {
i.Write(some Data, 0, 1024);
}
我已经尝试了刷新,但似乎数据只能通过这种方式从客户端传送到服务器。了解所有替代方案后,我很好奇如何实现这一点(即使不设置第二个频道,也可以使用TCP客户端发送数据并接收响应)。
答案 0 :(得分:-2)
使用中间MemoryStream
var memstr = new MemoryStream();
using (var i = new CryptoStream(memstr.....)
{
i.Write(some data);
var buf = memstr.GetBuffer();
client.GetStream().Write(buf);
}
var inp = client.GetStream.Read(..);
var memstr2 = new MemoryStream(inp);
using (var o = new CryptoStream(memstr2,...))
{
var x = memstr2.Read();
}