C# 上位机传数据给下位机

Dazelongfu 2014-09-21 06:34:36
我使用VS2005编译的程序作为上位机,会发送打印数据交给下位机打印;其中有一项数据是11位的string字符串,可以正常打印,现在我在上位机做了修改,其中一串string类型数字改成14位,发现打印过程中每次都打不完整(只能打11位),并且末几位总是打印到下一行的开始,取代了下一行的数据,

断点调试,发现生成的字符串是一长串字符,而且是完整的。所以不懂为什么这个14位的不能正常打出,有大侠能帮我分析一下吗?我只负责上位机,对下位机一点不懂,谁能告诉我下思路啊!
...全文
619 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-09-22
  • 打赏
  • 举报
回复
由于原来的程序是固定11个数字,所以打印程序就是打印在固定的位置 而你现在要改成14个数字 要么修改打印的位置,让它往左移3个数字 要么更加优化,让它能够识别出到底有几个数字,然后动态的计算位置 总之不修改是不成的
於黾 2014-09-22
  • 打赏
  • 举报
回复
现在可以确定的是,你生成了14个字节,已经写到文件里了 而另一个程序也成功的从你的文件里取出了14个字节 这个跟通信就已经没有关系了,你的程序再改也没有用 这个问题就是打印程序在取出字符串之后,打印的位置不正确,你需要修改打印程序啊
Dazelongfu 2014-09-22
  • 打赏
  • 举报
回复
StringBuilder sb1_menu = new StringBuilder(); StringBuilder sb2_user = new StringBuilder(); //StreamReader sr2 = new StreamReader(dir+"PrintHex.bin"); //FileStream fs2 = new FileStream (dir+"FinalHexNew.bin",FileMode.Create,FileAccess.Write); StreamReader sr2_menu = new StreamReader(dir + "PrintHex_menu.bin"); StreamReader sr2_user = new StreamReader(dir + "PrintHex_user.bin"); FileStream fs2_menu = new FileStream(dir + "menuInfo.bin", FileMode.Create, FileAccess.Write); FileStream fs2_user = new FileStream(dir + "userInfo.bin", FileMode.Create, FileAccess.Write); sb1_menu.Append(sr2_menu.ReadToEnd()); byte[] byte_total = HexToByte(sb1_menu.ToString()); fs2_menu.Write(byte_total, 0, byte_total.Length);//写数据信息 sb2_user.Append(sr2_user.ReadToEnd()); byte_total = HexToByte(sb2_user.ToString()); fs2_user.Write(byte_total, 0, byte_total.Length);//写数据信息 Hi,这是生成16进制打印文件的代码,到这我去查看userInfo.bin。
Dazelongfu 2014-09-22
  • 打赏
  • 举报
回复
StringBuilder sb1_menu = new StringBuilder(); StringBuilder sb2_user = new StringBuilder(); //StreamReader sr2 = new StreamReader(dir+"PrintHex.bin"); //FileStream fs2 = new FileStream (dir+"FinalHexNew.bin",FileMode.Create,FileAccess.Write); StreamReader sr2_menu = new StreamReader(dir + "PrintHex_menu.bin"); StreamReader sr2_user = new StreamReader(dir + "PrintHex_user.bin"); FileStream fs2_menu = new FileStream(dir + "menuInfo.bin", FileMode.Create, FileAccess.Write); FileStream fs2_user = new FileStream(dir + "userInfo.bin", FileMode.Create, FileAccess.Write); sb1_menu.Append(sr2_menu.ReadToEnd()); byte[] byte_total = HexToByte(sb1_menu.ToString()); fs2_menu.Write(byte_total, 0, byte_total.Length);//写数据信息 sb2_user.Append(sr2_user.ReadToEnd()); byte_total = HexToByte(sb2_user.ToString()); fs2_user.Write(byte_total, 0, byte_total.Length);//写数据信息 Hi,这是生成16进制打印文件的代码,到这我去查看userInfo.bin。
Dazelongfu 2014-09-22
  • 打赏
  • 举报
回复
没有找到原因,怎么解决啊
於黾 2014-09-22
  • 打赏
  • 举报
回复
这个问题看起来比较明显 打印程序就是无脑的读取字符串并打印在固定的位置,而不是按照字符串长度从后往前填写到格子里
Dazelongfu 2014-09-22
  • 打赏
  • 举报
回复
“一长串字符是完整的”, 我要输出的printerString[]字符串是完整的。
不能正常打印是因为没有按照正常位置打印出来,一行 一行打出来的效果是只能打11个,然后打不了。不知道这样描述是不是比较清楚?
lkf181 2014-09-22
  • 打赏
  • 举报
回复
人家约定好了的吧,不能顺便改的
Dazelongfu 2014-09-22
  • 打赏
  • 举报
回复
啊,协议我不清楚啊
於黾 2014-09-22
  • 打赏
  • 举报
回复
你自己都没理清你发送的字符数组怎么转换成字符串的,让别人帮你破解协议吗? 那你这数组是怎么生成的,拍脑袋生成的吗
Dazelongfu 2014-09-22
  • 打赏
  • 举报
回复
[0] 1 byte [1] 3 byte [2] 0 byte [3] 1 byte [4] 0 byte [5] 1 byte [6] 0 byte [7] 49 byte [8] 49 byte [9] 49 byte [10] 49 byte [11] 176 byte [12] 219 byte [13] 206 byte [14] 233 byte [15] 202 byte [16] 176 byte [17] 194 byte [18] 189 byte [19] 212 byte [20] 170 byte [21] 213 byte [22] 251 byte [23] 127 byte [24] 54 byte [25] 53 byte [26] 52 byte [27] 51 byte [28] 50 byte [29] 49 byte [30] 50 byte [31] 51 byte [32] 52 byte OutputReportBuffer {维数:[33]} byte[] 这是发给下位机的最终数组, 谁能告诉我这和: 2014 09 22 陆佰伍拾肆亿叁仟贰佰壹拾贰万叁仟肆佰伍拾陆元整 6543212345600 111 111 有什么关系啊
Dazelongfu 2014-09-21
  • 打赏
  • 举报
回复
哦,我检查中间临时文件(.bin),发现输出字符串是完整的一串,包含14位的字符串。上位机文本框做修改,但是打印协议没有修改,我是根据生成的中间临时文件(.bin)来判断的。那大叔你能告诉我是上位机的问题还是下位机的问题吗? 回答分就给你了。
  • 打赏
  • 举报
回复
上位机是客户端,下位机是服务器。不要因为“上位机”这个词儿挺时髦就以为它很高级。实际上,你既然做客户端,就应该遵守服务器的通讯约定,不能胡乱“改变指令”。你所谓的“现在我在上位机做了修改”是怎样修改的,根据什么呢?贴出来! 你调试说“一长串字符是完整的”,然后就问人家为什么“不能正常打印”,这到底是什么意思呢?你从哪一个实际例子或者设备指令手册上看出你的下位机可以打印14位字符呢?

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧