UDP发送的数据可以包含0吗?

rickys2080 2012-03-15 10:29:22
我用C++Builder2010的IdUDP控件发送数据,发送一个字符串:
TBytes MsgStr;
String s = {1,2,3,0,4,5,6};
s.SetLength(8);
MsgStr = s.BytesOf();
IdUDPClient1->SendBuffer(ip, port, MsgStr);

貌似s[3]这个0值会使得MsgStr截断,但是我确实又要发送0值(数据文件里有0),怎么办?
...全文
118 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2012-03-18
  • 打赏
  • 举报
回复
用二进制方式发送mem数据
rickys2080 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jonix 的回复:]

发送与接收肯定都是可以的。
[/Quote]
应该是可以,但我收不到 0 。。。
有个疑问,请教一下:
发送的代码:IdUDPClient1->SendBuffer(ip, port, MsgStr);
其中并无MsgStr的长度信息,它怎么知道我要发送的字符串长度呢?
还有,接收时也是,IdUDP怎么判断接收的字符串结束?以什么为标志?
Jonix 2012-03-16
  • 打赏
  • 举报
回复
发送与接收肯定都是可以的。
rickys2080 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bigfog 的回复:]

自己都找到问题了,呵呵
直接定义为数组吧

char ch[8]={1,2,3,0,4,5,6};
[/Quote]
直接定义为数组可以吗?我关心的是UDP发送能不能发送“0”的内容啊
bigfog 2012-03-16
  • 打赏
  • 举报
回复
自己都找到问题了,呵呵
直接定义为数组吧

char ch[8]={1,2,3,0,4,5,6};
__lhy 2012-03-16
  • 打赏
  • 举报
回复
SendBuf(LPVOID pBuff,int count);
其中pBuff是一块缓冲区,根据count发送该缓冲区多少内容
ccrun.com 2012-03-16
  • 打赏
  • 举报
回复
既然你要发送含0的数据,用byte数组比较科学。
bigfog 2012-03-16
  • 打赏
  • 举报
回复
不知道你的indy是哪个版本,下面代码给你参考一下,顺手写的,没测试过
char ch[8]={1,2,3,0,4,5,6};
TByteDynArray aa;
aa=RawToBytes(ch,8);
IdUDPClient1->SendBuffer(aa);
rickys2080 2012-03-15
  • 打赏
  • 举报
回复
妖哥,来看看啊
rickys2080 2012-03-15
  • 打赏
  • 举报
回复
额,更正一下,上面写的String s定义有误,程序应该是这样的:
String s;
s.SetLength = 8;
s[0] = 1;
s[1] = 1;
s[2] = 1;
s[3] = 0;//请注意,这里是0
s[4] = 1;
s[5] = 1;
MsgStr = s.BytesOf();
IdUDPClient1->SendBuffer(ip, port, MsgStr);

貌似s[3]这个0值会使得MsgStr截断,但是我确实又要发送0值(数据文件里有0),怎么办?

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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