Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TCP客户端连接远程主机冻结应用程序_C#_Sockets_Tcpclient_Rfid - Fatal编程技术网

C# TCP客户端连接远程主机冻结应用程序

C# TCP客户端连接远程主机冻结应用程序,c#,sockets,tcpclient,rfid,C#,Sockets,Tcpclient,Rfid,我是一个非常新的使用套接字的人,我正在尝试从RFID设备获取数据,该设备在端口1000上有一个原始流。找到了这段代码,我用这段代码在一个控制台应用程序上得到了这段代码 TcpClient tcpClient; NetworkStream networkStream; tcpClient = new TcpClient("10.19.1.101", 10000); networkStream = tcpClient.GetStream(); StreamReader

我是一个非常新的使用套接字的人,我正在尝试从RFID设备获取数据,该设备在端口1000上有一个原始流。找到了这段代码,我用这段代码在一个控制台应用程序上得到了这段代码

   TcpClient tcpClient;
   NetworkStream networkStream;
   tcpClient = new TcpClient("10.19.1.101", 10000);
   networkStream = tcpClient.GetStream();
   StreamReader streamReader = new StreamReader(networkStream);
   StreamWriter streamWriter = new StreamWriter(networkStream);
   String wline  = "";
   while (wline != "exit")
   {
       Console.Write(streamReader.ReadLine());
       Console.Write(Environment.NewLine);
       Console.Write("next command:");
       wline = Console.ReadLine();
       streamWriter.Write(wline);
   }
显然,这段代码等待在远程主机中编写一些命令,但我不需要编写任何东西。我只是想获取RFID设备发送的信息,基本上是一个RFID标签代码。标签代码可以在随机时间段内到达。实际上,我在前面的代码中注释了一些行,并且能够在到达控制台时打印标记代码

TcpClient tcpClient;
NetworkStream networkStream;
tcpClient = new TcpClient("10.19.1.101", 10000);
networkStream = tcpClient.GetStream();
StreamReader streamReader = new StreamReader(networkStream);
//StreamWriter streamWriter = new StreamWriter(networkStream);
String wline  = "";
while (wline != "exit")
{
    Console.Write(streamReader.ReadLine());
    Console.Write(Environment.NewLine);
    //Console.Write("next command:");
    //wline = Console.ReadLine();
    //streamWriter.Write(wline);
}
我认为这不是正确的方法,因为我没有控制while循环。有谁能指导我找到解决“问题”的正确途径或方法吗

编辑:我更改了代码,如下所示:

        TcpClient tcpClient = new TcpClient("10.19.1.101", 10000);
        NetworkStream networkStream = tcpClient.GetStream();
        StreamReader streamReader = new StreamReader(networkStream);

        while (tcpClient.Connected)
        {
            Console.WriteLine(streamReader.ReadLine();
        }

奇怪的是,当我在winFrom应用程序中执行相同的操作时,应用程序在循环中运行几次后会冻结。

似乎您没有将wline更新为循环中的流值。

听起来您的应用程序非常简单,使用NetworkStream和TcpClient提供了太多的功能。最好是“保持简单”。尝试搜索一些直接使用Socket类并使用Socket.Receive()读取输入的C#代码示例。是否检查传入连接???可能是客户端应用程序没有将任何数据发送到流中?我在winForm应用程序中进行了一些测试,其中我有一个datagridview用于数据,似乎应用程序正在获取数据,但没有添加到datagridview。当我为循环使用一个计数器时,一个控件将对给定的数字执行一个给定的数字,之后所有的信息都会同时正确地添加到datagridview中。所以我想我的问题是循环。