komachenjd 2013-05-31 07:50 采纳率: 0%
浏览 3231

C#中的tcpclient中断问题

我编辑了代码用于和高清摄像机通讯,摄像机作为服务器端,分别有两个端口,一个端口用于控制命令的交互,一个命令用于获取摄像机图像,所使用的通讯代码是一样的。
但图像通讯是连续不间断的,每收到一张图片,要回复一个继续的命令,这个一直工作正常。但控制命令的交互就总是出问题,只能第一次发送是正确的,后面发送就无响应了,相机也不会有任何响应发生。
看网上有介绍说是异步通讯的问题,在while循环里的会一直工作,没有while循环的会出现中断情况,可我不知道如何实现,网上的代码都是简单的发送,关闭,我也尝试了发送前建立,发送结束关闭,但还是同样的问题。
请各位大侠给予指导,谢谢!
    public bool networkbuild()//建立端口连接
    {
        if (client == null)
        {
            try
            {
                client = new TcpClient(networkip, networkport);
                netstream = client.GetStream();
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return false;
        }
        return true;
    }

    public void networkclose()//关闭端口连接
    {
        if (client != null)
        {
            try
            {
                netstream.Close();
                client.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

    public bool netsendmessage(byte[] message,int length)//发送数据
    {
        if (netconnected)
        {
            try
            {
                netstream.Write(message, 0, length);
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return false;
        }
        MessageBox.Show("连接已关闭");
        return false;
    }

    public bool netreadmessage(byte[] message, int length)//读取数据
    {
        try
        {
            int i = 0;
            int cont = 0;
            if (netstream != null)
            {                    
                while (i<length)
                {
                    cont = netstream.Read(message, i, length - i);
                    if (cont > 0)
                    {
                        i += cont;
                    }
                }

            }
            else
            {
                return false;
            }
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return false;
    }
  • 写回答

1条回答

  • 冰山76 2022-06-01 14:18
    关注

    但控制命令的交互就总是出问题,只能第一次发送是正确的,后面发送就无响应了,相机也不会有任何响应发生。
    交互命令发出之后,服务器端做出应答,你应该截取每一步的输入输出,看看到底是在哪里出现的问题,这段代码无法找到问题所在

    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100