在c#中重用TcpClient

时间:2014-01-23 16:50:09

标签: c# performance windows-mobile tcpclient reusability

我们有一台设备通过无线网络接受ascii消息,然后以值响应,我已在c#的Windows Forms 2010解决方案中成功实现了这一功能。

我写这个作为测试解决方案来证明技术,并且设备的实际调用将在Motorola MC55手持设备上进行。

我现在已经在Visual Studio 2008中编写了一个额外的测试解决方案,并将其安装到设备上,但是每次在移动设备上调用时,与TcpClient的连接大约需要30秒,而在Windows解决方案中它与#39几乎是即时的。

这太慢了,所以我开始考虑重复使用TcpClient,但没有取得任何成功,并想知道是否有其他人遇到类似的问题,并询问他们是如何解决这个问题,或者是否有人可以提供任何建议如何重用TcpClient,所以每次我想打电话时都不必创建一个新的。

连接代码如下所示......

     public static string GetValueFromDevice(string deviceIPAddress, int devicePort, string messageSentToDevice)
    {
        string returnValue = "";

        try
        {
            TcpClient client = new TcpClient(deviceIPAddress, devicePort);

            byte[] inData = System.Text.Encoding.ASCII.GetBytes(messageSentToDevice);
            NetworkStream stream = client.GetStream();
            stream.Write(inData, 0, inData.Length);

            byte[] outData = new Byte[256];
            int bytes = stream.Read(outData, 0, outData.Length);
            returnValue = System.Text.Encoding.ASCII.GetString(outData, 0, bytes);

            stream.Close();
            client.Close();
        }
        catch (Exception ex)
        {
            returnValue = ex.Message;
        }

        return returnValue;
    }

2 个答案:

答案 0 :(得分:1)

只要您愿意,您可以让TcpClient保持打开状态。将clientstream变量保留为类的一部分(而不是在函数中),并且在完成之前不要调用Close()

答案 1 :(得分:1)

您可以持久化并重新使用客户端并流式处理并将代码放入单独的线程中。

但是,我不相信客户端需要大约30秒才能初始化。我发现在使用ActiveSync连接时TCP客户端的启动速度很慢,但是如果你只有无线连接,它应该立即启动。

因此,请检查您的网络设置。在使用Active Sync进行首次VS部署和调试会话后,Visual Studio能够重新使用确定的无线IP地址,并通过无线TCP / IP运行后续部署/调试会话(如果PC上的ActiveSync设置为允许AS期间的数据连接连接)。