NetworkStream.write只能使用一次,后面再使用无效

 public delegate void ShowMessageMethod2(TcpClient tc);
        private void ShowMessage2(TcpClient tc)
        {
            String IP地址 = ((IPEndPoint)tc.Client.RemoteEndPoint).Address.ToString();
            String 端口 = ((IPEndPoint)tc.Client.RemoteEndPoint).Port.ToString();
            String 事件 = "无事件";
            String 备注 = "无备注";
            String 内容 = "无内容";

            NetworkStream stm = tc.GetStream();
            byte[] readBuf = new byte[maxBufferSize];
            int realByteNumber = stm.Read(readBuf, 0, maxBufferSize);
            //显示收到的数据
            内容 = (StrHexHelp.byteToHexStr(readBuf).Substring(0,realByteNumber * 2));
            byte[] writeBuf1;
            byte[] writeBuf2;

             //总召唤命令
            /*
             * 长度是18
             * 第七位是64
             * 第9位6是动作 7是确认 A是结束
             */
            if ((realByteNumber == 18) && (readBuf[7] == 0X64) &&(readBuf[9] == 0X06))
            {
                事件 = "总召唤命令";
                备注 = "终端收到总召唤命令(终端1)";
                this.系统日志TableAdapter.Insert(IP地址, 端口, System.DateTime.Now.ToString(), 事件, 备注, 内容);
                
             
                事件 = "总召唤确认帧及结束帧";
                备注 = "终端返回总召唤确认帧(终端2)";
                writeBuf1 = new byte[36];
                for (int i = 0; i < 18; i++)
                    writeBuf1[i] = readBuf[i];
                writeBuf1[4] = 0X80;//4控制域
                writeBuf1[9] = 0X07;//9传送原因
                                  
                for (int i = 18; i < 36; i++)
                    writeBuf1[i] = readBuf[i-18];
                writeBuf1[22] = 0X80;//4控制域
                writeBuf1[27] = 0X0A;//A传送原因
                内容 = (StrHexHelp.byteToHexStr(writeBuf1));
                this.系统日志TableAdapter.Insert(IP地址, 端口, System.DateTime.Now.ToString(), 事件, 备注, 内容);
              


                writeBuf2 = new byte[6] { 1, 2, 3, 4, 5, 6 };
                stm.Write(writeBuf2, 0, 6); //只有这一行起作用
                stm.Write(writeBuf1, 0, 36); //这一行无效(并且字节不会被覆盖,就显示短的那一行)

                goto GameOver;

            }

        GameOver:
            stm.Close();
            tc.Close();
            this.系统日志TableAdapter.Fill(this.系统日志DataSet.系统日志);

            dataGridView2.ClearSelection();
            dataGridView2.Rows[0].Selected = true;

        }

 

转载于:https://www.cnblogs.com/qqhfeng/p/7598091.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值