仅使用TCP客户端的双向通信

时间:2016-03-17 22:57:17

标签: c# sockets tcp

在处理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客户端发送数据并接收响应)。

1 个答案:

答案 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();
}