【问题标题】:tcpClient Connecting Remote host freezes applicationtcpClient 连接远程主机冻结应用程序
【发布时间】:2015-05-02 07:05:49
【问题描述】:

我是使用套接字的新手,我正在尝试从在端口 1000 上具有原始流的 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);
   }

显然,这段代码等待一些命令被写入远程主机,但我不需要写任何东西。我只是想获取基本上是 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 应用程序中执行相同操作时,应用程序会在循环几次后冻结。

【问题讨论】:

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

标签: c# sockets tcpclient rfid


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2014-01-14
    相关资源
    最近更新 更多