小问题——SPCOMM如何收发文件?

jukyy 2003-06-07 09:44:45
给出SPCOMM收发数据的源码段也行呀。
...全文
123 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jukyy 2003-06-11
  • 打赏
  • 举报
回复
歇了一天,现在测试,突然好了。自己都感到很意外。但是还是感谢各位老师们的指点。谢谢!结贴吧。
wangxiangsjz 2003-06-11
  • 打赏
  • 举报
回复
请留下Email,我把编译过的Exe给你,请把串口的2-3脚短路,自己发送,自己接收。可以看到发送和接收的数据。
jukyy 2003-06-11
  • 打赏
  • 举报
回复
xjzeng@263.net谢谢!
我用了两台电脑进行测试呢。
Behard 2003-06-11
  • 打赏
  • 举报
回复
如果发送的为 0x11 呢?
jukyy 2003-06-11
  • 打赏
  • 举报
回复
总之当S[i]=13时SPCOMM就接收不到。
//------------------------------------------------------------------------
3、还是再次提醒你Outx_XonXoffFlow=false;和Inx_XonXoffFlow=false;这两个属性默认应该是True,它是串口通信的软件握手信号。现在都是用硬件握手,不需要它了。
4、Xoff=#19=\x13
5、Xon=#17=\x11
//------------------------------------------------------------------------
上述这几项在我这里都是SPCOMM的默认值,与你要求的吻合呢。
困惑……
Behard 2003-06-10
  • 打赏
  • 举报
回复
没有使用过 SPComm 控件
在哪里有这个控件?我下载试一试
wangxiangsjz 2003-06-10
  • 打赏
  • 举报
回复
1、看一下int n='\r'; 就知道回车符是多少了。
2、用SPComm接收数据绝对不存在“过滤问题”,我用它做监控软件已经号几年了。我可以打保票它没有问题。
3、还是再次提醒你Outx_XonXoffFlow=false;和Inx_XonXoffFlow=false;这两个属性默认应该是True,它是串口通信的软件握手信号。现在都是用硬件握手,不需要它了。
4、Xoff=#19=\x13
5、Xon=#17=\x11
6、上述两个参数在属性中有的。

jukyy 2003-06-10
  • 打赏
  • 举报
回复
回车符是十进制的19,十六进制的13,观察上层我的代码,我是把字符串里的13当作十六进制了,0x+"13"=0x13,再通过转换char(StrToInt(0x13))就成了回车符了,可能用二进制发送就没有问题吧,但是现在我就发送端不改动(多线程+API),在接收端就SPCOMM能否有措施防止“过滤”。
在SPCOMM的Comm1ReceiveData函数里,参数 WORD BufferLength的值就已经小了,例如发送端本来长度为26(包括两个13字符),到这里BufferLength的值就为24了。
wangxiangsjz 2003-06-10
  • 打赏
  • 举报
回复
1、回车是十进制的13,十六进制是0D。换行是十进制10,十六进制0A。
2、SPComm可以发送接收任何二进制数据而不会过滤掉,不信可以用我的例子程序(exe)进行验证。
wangxiangsjz 2003-06-10
  • 打赏
  • 举报
回复
楼上:
ftp://chinabcb:chinabcb@61.242.192.139/income/王翔/

或者与我联系:wangxiangsjz@sina.com
jukyy 2003-06-10
  • 打赏
  • 举报
回复
Outx_XonXoffFlow=false;
Inx_XonXoffFlow=false;
默认值就是这样的,现在我知道因为我在发送端如下转换过:
String S[26];
char C[26];
// byte *sendbuf_h = new byte[1002];
byte *send=new byte[26];
for(int i=0;i<26;i++)
{
S[i] = strFileHead.SubString(i*2+1,2);
C[i] = char(StrToInt("0x" + S[i]));
}
13作为十六进制是19,19对应的符号是回车符,很显然SPCOMM的Comm1ReceiveData函数把字符串里的13作为回车符“过滤”掉了,我的想法是怎样不让SPCOMM过滤掉任何字符,直接显示出来?
wangxiangsjz 2003-06-09
  • 打赏
  • 举报
回复
Outx_XonXoffFlow=false;
Inx_XonXoffFlow=false;
jukyy 2003-06-09
  • 打赏
  • 举报
回复
没人知道怎么回事吗?
jukyy 2003-06-09
  • 打赏
  • 举报
回复
我在Comm1ReceiveData事件里填加如下代码:
AnsiString S,T;
char Buf[4096];
Move(Buffer,Buf,BufferLength);
for (int i=0;i<BufferLength;i++)
{
T=IntToHex(Buf[i],2);
if (T.Length()>2) T=T.SubString(7,2);
S += T;
}
Memo1->Lines->Add(S);
RE1->Lines->Add(BufferLength); //显示为24

在发送端发送如下数据:
AABBCC0634770000888117090A010E0B0910130A37130B1202C8 //长度为26*2
结果在接收端通过上述代码收到:
AABBCC0634770000888117090A010E0B09100A370B1202C8 //长度为24*2
少了两位,并且都是少了“13”,这个13有什么问题吗?

wangxiangsjz 2003-06-08
  • 打赏
  • 举报
回复
ftp://chinabcb:chinabcb@61.242.192.139/income/王翔/
这里有我的例子。
如果ftp打不开,请与我直接联系。wangxiangsjz@sina.com
jukyy 2003-06-08
  • 打赏
  • 举报
回复
站点打不开呀。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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