SendBuff&&ReadBuffer之惑

supwjhuLoveCjj 2003-07-12 06:38:25
请问各位大侠。。我编两个程序--一个Server,一个Client----当然是两个独立编译的。我想从Server把一些数据通过SendBuff传送到Client..请问怎样才能在Client接受到来自Server的这些数据..我试过,好像SendBuff对于传送字符和字符串还可以。但是对于其他变量类型--例如Float只能显示'0'.....我想传递通过void *memcpy(void *dest, const void *src, size_t n);函数转换的---src是一个float数组,把它memcpy到dest。。然后把它传送出去。在客户端这边接收,并显示。。
...全文
169 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2003-07-15
  • 打赏
  • 举报
回复
谢谢,我很少上QQ,TENCENT14222421,有什么事给我MAIL吧:xpdai@21cn.com。
supwjhuLoveCjj 2003-07-14
  • 打赏
  • 举报
回复
Please tell me your QQ 最好是 yahooMessenger,或是MSN。。本人想认识您。。。
supwjhuLoveCjj 2003-07-14
  • 打赏
  • 举报
回复
No..我设置了一个计数器,等待5 seconds...然后收全了。。但是我只能把Client Diaconnect掉,然后再Connect上Server,才能接收到正确的数据正确的顺序.....
铖邑 2003-07-14
  • 打赏
  • 举报
回复
可能是因为你第一次没有收全,你要注意ReceiveBuf的返回值,不一定都是16,你可能应该这样写:
int length = ClientSocket->Socket->ReceiveBuf(test,16);
for(int i=0;i<length;i++)
{ Memo2->Lines->Add(IntToStr(test[i]));}
supwjhuLoveCjj 2003-07-14
  • 打赏
  • 举报
回复
ok.请问:比如:
Server. BYTE test[16];
for(i=0;i<16;i++)
test[i]=i;

ServerSocket->Socket->Connections[0]->SendBuf(test,16);

client. BYTE test[16];
strcpy(test,"");
ClientSocket->Socket->ReceiveBuf(test,16);
for(int i=0;i<16;i++)
{ Memo2->Lines->Add(IntToStr(test[i]));}

一开始显示的数据莫名其妙,然后就是从后四个开始显示即是:12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11...
铖邑 2003-07-13
  • 打赏
  • 举报
回复
SendBuf有Flags参数吗,应该是API函数send有Flags参数。
Flags参数,0是正常发送,MSG_OOB发送紧急数据,MSG_DONTROUTE不通过路由发送。

接收数据时和发送差不多:
float a[5];
ReceiveBuf(a, sizeof(a));
铖邑 2003-07-13
  • 打赏
  • 举报
回复
ReceiveBuf是返回真实发出的字节。
supwjhuLoveCjj 2003-07-13
  • 打赏
  • 举报
回复
int Flags;
Flags=ReceiveBuf(a, sizeof(a));
if(Flags==0) {/Receive==ok;/}
else {/Receive==failture;/}

我可以这样用吗?
supwjhuLoveCjj 2003-07-12
  • 打赏
  • 举报
回复
SendBuf(void *Buf, int BufSize, int Flags = 0);中的Flags怎么用??
supwjhuLoveCjj 2003-07-12
  • 打赏
  • 举报
回复
然后显示出来?在 Memo中
supwjhuLoveCjj 2003-07-12
  • 打赏
  • 举报
回复
接收呢
铖邑 2003-07-12
  • 打赏
  • 举报
回复
那也没有问题啊。
也可以直接发送:SendBuf(a, sizeof(a));
或者,先拷贝后发送:
memcpy(dest, a, size_t sizeof(a));
SendBuf(dest, sizeof(a));
记得在这之前先给dest分配空间:dest = new char[sizeof(a)];
supwjhuLoveCjj 2003-07-12
  • 打赏
  • 举报
回复

但。现在问题就是要用void *memcpy(void *dest, const void *src, size_t n);然后再以
SendBuff()传送
铖邑 2003-07-12
  • 打赏
  • 举报
回复
主要是长度要注意,你不一定要拷贝,可以直接发送出去。
比如:float a[5];
send(s, (const char *)a, sizeof(a), 0);

1,317

社区成员

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

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