【问题标题】:Check for incoming data检查传入数据
【发布时间】:2010-06-27 17:19:06
【问题描述】:

我正在开发一个在局域网中工作的加密聊天程序,它也应该能够发送文件。问题如下: 1-对于聊天部分它只发送1条消息并关闭连接,对方应该再次运行程序以接收更多消息,我试图把它放在这样的循环中 (receive close 再receive),但是程序崩溃了,

我在接收文件时遇到同样的问题,
知道如何解决这个问题吗? 这是代码 IP = textBox2.Text.ToString(); int 端口 = int.Parse(textBox1.Text); IPAddress IP2 = IPAddress.Parse(IP); TcpListener TCPListen = new TcpListener(IP2, port);

                TCPListen.Start();

            TcpClient TCP = TCPListen.AcceptTcpClient();
            //bool a = false;

            NetworkStream NetStream = TCP.GetStream();



            //while (!a)
            //{

            RijndaelManaged RMCrypto = new RijndaelManaged();


            byte[] Key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };
            byte[] IV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 };




            CryptoStream CryptStream = new CryptoStream(NetStream,
               RMCrypto.CreateDecryptor(Key, IV),
               CryptoStreamMode.Read);

            StreamReader SReader = new StreamReader(CryptStream);




            message = SReader.ReadToEnd();

            textBox3.Clear();

            textBox3.Text = message;

            CryptStream.Flush();

            SReader.Close();


            //encryption(NetStream);




            NetStream.Flush();

            NetStream.Close();

            TCPListen.Stop();
            TCP.Close();

而且它在一个循环中 布尔 a = 假; while(!a) 表示持续执行。

【问题讨论】:

  • 我们需要更具体的信息。程序如何崩溃?崩溃的代码是什么?
  • 我不能把它作为命令,所以将编辑问题并把它放在那里。
  • 这是从客户端接收加密数据的服务器,如果您需要其他任何内容,请告诉我。

标签: c#


【解决方案1】:

首先,你让这件事变得比它必须的要复杂得多。对于这样的事情,实际上不再需要直接处理套接字甚至 TcpClient 了。使用 WCF 让客户端相互通信。这将非常简单,您不必担心所有这些乏味。 WCF 为您处理所有管道。

其次,如果您打算按照自己的方式进行操作 - 您可以打开 NetworkStream 或 SslStream 并“读取”和“写入”该流以处理您的所有通信。最简单的方法是通过一个连接/流做所有事情。这意味着您在传输文件时无法聊天。一旦您将另一个流带入图片,那将是另一个复杂的数量级,因为现在除了您的主流之外,您还必须管理该流的连接和生命周期。在我看来,这种方法可能非常脆弱——因为您的大部分代码都必须围绕从问题中恢复。如果有人在您通信时重新启动路由器怎么办?如果您的文件发送失败会怎样?因为您在如此低的级别处理此问题,所以这将需要大量代码 - 只是为了优雅地失败。

再次,我会积极使用 WCF。希望对您有所帮助。

【讨论】:

  • 这对人很有帮助,我认为这是解决问题的关键,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多