C#TCPClient - 每次传输后保持打开还是关闭?

时间:2014-04-08 14:04:02

标签: c# .net tcp tcpclient

我有一个在C#中使用.NET TcpClient对象的工业应用程序。

我只是以相当长的,不一致的间隔从两个不同的条形码阅读器接收一个短条形码字符串。该应用程序运行良好一段时间,但最终我得到一个或其他条形码阅读器的连接问题。连接丢失,有时扫描仪将停止接受连接,直到重新启动。

现在应用程序,我只创建一次连接。当扫描仪被触发时(来自另一个IO设备),我得到了流,条形码就可以了。

我想知道我是否应该等待触发器立即执行所有操作 - 即创建连接,获取流,关闭连接并处理每个触发器的TcpClient。我希望这个或其他一些方法可以防止我的设备丢失连接并挂断。

困难的部分是我不知道"服务器" (扫描仪)正在做,因为我无法调试它们。

任何帮助表示赞赏! 感谢。

简单的连接代码:

private void Connect()
    {
        IPAddress IP = IPAddress.Parse(IPString);

        try
        {
            TCPClient.Connect(IP, PortNumber);
        }
        catch
        {
            // Connection failed
            Message = "Connection Failed @" + IP;
        }

        if (TCPClient.Connected == true)
        {
            // Connection Succeeded
            Message = "Connection Established @" + IP;
            TCPSocket = TCPClient.Client;
        }
    }

简单数据接收代码:

public bool DataAvailable()
    {
        String data = null;
        Byte[] buffer = new Byte[256];
        int bytesRead;

        NetworkStream Stream = TCPClient.GetStream();

        if (!Stream.DataAvailable) return false;
        else
        {
            do
            {
                bytesRead = Stream.Read(buffer, 0, buffer.Length);
                data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            }
            while (Stream.DataAvailable);
        }
        Message = data;
        return true;
    }

我也有这种简单的连接测试,每分钟左右都会在每台扫描仪上运行,但我很确定它没有按照我的意图行事(并且它也可能对滴剂):

public bool TestConnection()
    {
        try
        {
            return !(TCPSocket.Poll(1000, SelectMode.SelectRead) && TCPSocket.Available == 0);
        }
        catch (SocketException) { return false; }
    }

0 个答案:

没有答案