请教关于按字节读取socket接收到的数据

chenty85 2006-12-07 12:43:05
请问如何按字节读取socket接收到的数据
ansistring和byte类型怎么转换?

...全文
320 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenty85 2006-12-15
  • 打赏
  • 举报
回复
嗯 谢谢各位的指导
yy2001 2006-12-12
  • 打赏
  • 举报
回复
gz
pp616 2006-12-09
  • 打赏
  • 举报
回复
24 39 30 30 30 31 23 00 00 2A 33 33
00做为字符串结束符。你直接将缓冲区转为String当然只能到23 因为00被理解为字符串结束符了。
pp616 2006-12-09
  • 打赏
  • 举报
回复
用你发送时候的方法。
for(int i=1;i<=64;i++)
{
char buf[8];
int c=(CHAR)data[i];
wsprintf(buf,"%2x",c);
hex=hex+buf;
}

onClientRead修改为这样。
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString hex;
int len=Socket->ReceiveLength();
char *buf=(char *)GlobalAlloc(GPTR,len+1);
Socket->ReceiveBuf(buf,len);
for(int i=0;i<=len;i++)
{
char charbuf[8];
int c=(CHAR)buf[i];
memset(charbuf,0x00,8);
wsprintf(charbuf,"%2x",c);
hex=hex+charbuf;
}
GlobalFree(buf);
//现在hex里是你要的字符串了。
}
chenty85 2006-12-09
  • 打赏
  • 举报
回复
那应该怎样从缓冲区里面读数据呢?
chenty85 2006-12-08
  • 打赏
  • 举报
回复
我在客户端发送一串数据 16进制数为 24 39 30 30 30 31 23 00 00 2A 33 33
在服务端却只能读到 24 39 30 30 30 31 23 , 我改如何才能把整段读出来呢?
客户端部分程序
void __fastcall TForm1::Btn_sendinbyteClick(TObject *Sender)
{
char data[64];
memset(data,0x00,64);
data[0]=0x24;
data[1]=0x39; data[2]=0x30;data[3]=0x30;data[4]=0x30;data[5]=0x31;
data[6]=0x23;
data[7]=0x00; data[8]=0x00;
data[9]=0x2A;
data[10]=0x33; data[11]=0x33;
String hex;
for(int i=1;i<=64;i++)
{char buf[8];
int c=(CHAR)data[i];
wsprintf(buf,"%2x",c);
hex=hex+buf;
}
ShowMessage(hex) ;
if (Socketed)
{
Socketed->SendText(data);
}

}
服务端程序
void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{ //onread
AnsiString t_data,t_ip;
char schar[255];
memset(schar,0x00,256); //初始化授受缓冲区
Socket->ReceiveBuf(schar,256);
if (!Socket->Data)
{ if (receive->Lines->Count>=5 )
{receive->Lines->Clear();}
receive->Lines->Add(schar) ;
}

}
pp616 2006-12-08
  • 打赏
  • 举报
回复
TCustomWinSocket::ReceiveBuf
chenty85 2006-12-07
  • 打赏
  • 举报
回复
呵呵 第一次发帖 而且对bcb也是初学者 见谅

本来想问90001 这串字符怎么转换成 3930303031 现在懂了

不过还是想知道Serversocket有没有这样的函数 直接类似Socket->ReceiveText()得到一串1字节的数据 类似说收到的数据是ascii码的16进制
铖邑 2006-12-07
  • 打赏
  • 举报
回复
楼主还没有掌握问问题的诀窍!

按字节读取socket接收到的数据=====》一个字节一个字节的接收数据?
char ch;
recv(s, &ch, 1, 0);

ansistring和byte类型怎么转换?
ansistring.c_str()可以返回字符串的存储地址

1,317

社区成员

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

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