C# 检查传入数据

C# 检查传入数据,c#,C#,我正在开发一个加密聊天程序,该程序在局域网中工作,它还应该能够发送文件。以下是问题: 1-对于聊天部分,它只发送1条消息并关闭连接,另一方应再次运行该程序以接收更多消息,我尝试将其放入这样的循环中 (接收关闭并再次接收),但程序崩溃 我在接收文件时也遇到同样的问题, 你知道我该怎么解决这个问题吗? 这是密码 IP=textBox2.Text.ToString(); int port=int.Parse(textBox1.Text); IPAddress IP2=IPAddress.Parse(I

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

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

它是在一个像 布尔a=假;
虽然(!a)意味着要不断地去做。

首先,你让事情变得比必须的复杂得多。对于这样的事情,实际上不再需要直接处理socket甚至TcpClient。使用WCF让客户端彼此通信。这将是非常简单的,你不必担心所有这些繁琐。WCF为您处理所有管道

第二,如果你打算按你现在的方式来做,你可以打开一个NetworkStream或SSL流,然后对该流进行“读”和“写”来处理你的所有通信。最简单的方法是通过一个连接/流完成所有操作。这意味着在传输文件时,你不能聊天。一旦您将另一个流引入到图片中,这将是另一个更复杂的数量级,因为现在除了您的主流之外,您还必须管理该流的连接和生命周期。在我看来,这种方法可能非常脆弱——因为您的大多数代码都必须围绕着从问题中恢复。如果有人在您通信时重新启动路由器怎么办?如果文件发送失败,会发生什么情况?因为您正在以如此低的级别处理此问题,所以需要大量代码才能正常地失败


同样,我会积极使用WCF来实现这一点。希望能有所帮助。

我们需要更多具体信息。程序是如何崩溃的?什么是崩溃的代码?我不能把它作为命令,所以我会编辑问题并把它放在那里。这是从客户端接收加密数据的服务器,如果你还需要什么,请告诉我。这真的帮了大忙,我想这是解决问题的关键,非常感谢。
                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();