求个实例.关于使用socket发送数据流解决思路
求个实例.关于使用socket发送数据流
求一个实例..利用socket发送数据流.
才接触的socket...求指点..
因为需要发送的是一个class..客户端接收此class后还原成对应的数据结构然后显示出来..
现在不知道怎么解决的就是.如何将这个class变成数据流...有想过通过保存成json文件.
SendStream如何将一个json或者一个class发送到客户端.并在客户端还原...服务端和客户端都有同样结构的class
------解决方案--------------------
发送:数据流长度 + 数据流
可以规定 数据流长度 为一个 4char 的 int 型,不够的话,你用 8char 也行。
------解决方案--------------------
跟把class保存到文件中是一个道理,你就当成把class写到一个文件中,然后把文件切成一块块发送出去,接收端收到文件后在把class从文件中读出来一样,具体做的时候不一定非得有这个文件,也没必要json格式,只要这边能完整发送、那边能顺利读出就行了
------解决方案--------------------
我想通过网络向设备(led屏)iP:192.168.224.250 端口号:2929
发送数据,比如发送unsigned char buf[1024];
中的数据,
请问是用BCB中的
TClientSocket *ClientSocket1;
TServerSocket *ServerSocket1;
TUdpSocket *UdpSocket1;
这三个用那个发送啊,如何发送?
使用TClientSocket *ClientSocket1;
属性设置:
1,Address:192.168.224.250
2,Port:2929
//-----------------------------------------------
使用ClientSocket完成了工作,代码贴出来以备以后使用,呵呵
C/C++ code
void __fastcall TMainFrm::FormCreate(TObject *Sender)
{
TIniFile *ini;
ini=new TIniFile(".//SAS_Config.ini");
LedIp=ini->ReadString("infLED","LEDIP","192.168.224.250");
ini->WriteString("infLED","LEDIP",LedIp);
COMx=ini->ReadInteger("infLED","端口",2929);
ini->WriteInteger("infLED","端口",COMx);
LEDIpPort=COMx;
delete ini;
try
{
ClientSocket1->Active=false;
ClientSocket1->Address=LedIp;
//ClientSocket1->Host=LedIp;
ClientSocket1->Port=LEDIpPort;
//ClientSocket1->Open();
ClientSocket1->Active=true;
}
catch(...)
{
//
}
}
void sendbuf(unsigned char * buf,int bufIndex)
{
try
{
//ClientSocket1->Close();
//ClientSocket1->Active=false;
//ClientSocket1->Address=LedIp;
//ClientSocket1->Port=LEDIpPort;
//ClientSocket1->Open();
ClientSocket1->Active=true;
ClientSocket1->Socket->SendBuf(buf,bufIndex);
//ClientSocket1->Close();
}
catch(...)
{
//
}
}
void __fastcall TMainFrm::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket)
{
///客户端读取信息
try
{
AnsiString Msg=Socket->ReceiveText();
unsigned char buf[100];
if(Msg.Length()<99)
{
strcpy(buf,Msg.c_str());
String ss="";
for(int i=0;i<Msg.Length();i++)
{
ss+=IntToHex(buf[i],2);
ss+=",";
}
InfoLedEdt->Text=ss;
}
///判断是不是自己发出的信息
// if(Msg!=Memo2->Lines->Strings[Memo2->Lines->Count-1])
// Memo2->Lines->Add(Msg);
}
catch(...)
{
//
}
}
void __fastcall TMainFrm::ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket)
{
try
{
AnsiString Msg="连接成功-" + Socket->RemoteHost +"[地址]" + Socket->RemoteAddress + "[端口]" + IntToStr(Socket->RemotePort);
InfoLedEdt->Text=Msg;
}
catch(...)
{
//
}
}
void __fastcall TMainFrm::ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket)
求一个实例..利用socket发送数据流.
才接触的socket...求指点..
因为需要发送的是一个class..客户端接收此class后还原成对应的数据结构然后显示出来..
现在不知道怎么解决的就是.如何将这个class变成数据流...有想过通过保存成json文件.
SendStream如何将一个json或者一个class发送到客户端.并在客户端还原...服务端和客户端都有同样结构的class
------解决方案--------------------
发送:数据流长度 + 数据流
可以规定 数据流长度 为一个 4char 的 int 型,不够的话,你用 8char 也行。
------解决方案--------------------
跟把class保存到文件中是一个道理,你就当成把class写到一个文件中,然后把文件切成一块块发送出去,接收端收到文件后在把class从文件中读出来一样,具体做的时候不一定非得有这个文件,也没必要json格式,只要这边能完整发送、那边能顺利读出就行了
------解决方案--------------------
我想通过网络向设备(led屏)iP:192.168.224.250 端口号:2929
发送数据,比如发送unsigned char buf[1024];
中的数据,
请问是用BCB中的
TClientSocket *ClientSocket1;
TServerSocket *ServerSocket1;
TUdpSocket *UdpSocket1;
这三个用那个发送啊,如何发送?
使用TClientSocket *ClientSocket1;
属性设置:
1,Address:192.168.224.250
2,Port:2929
//-----------------------------------------------
使用ClientSocket完成了工作,代码贴出来以备以后使用,呵呵
C/C++ code
void __fastcall TMainFrm::FormCreate(TObject *Sender)
{
TIniFile *ini;
ini=new TIniFile(".//SAS_Config.ini");
LedIp=ini->ReadString("infLED","LEDIP","192.168.224.250");
ini->WriteString("infLED","LEDIP",LedIp);
COMx=ini->ReadInteger("infLED","端口",2929);
ini->WriteInteger("infLED","端口",COMx);
LEDIpPort=COMx;
delete ini;
try
{
ClientSocket1->Active=false;
ClientSocket1->Address=LedIp;
//ClientSocket1->Host=LedIp;
ClientSocket1->Port=LEDIpPort;
//ClientSocket1->Open();
ClientSocket1->Active=true;
}
catch(...)
{
//
}
}
void sendbuf(unsigned char * buf,int bufIndex)
{
try
{
//ClientSocket1->Close();
//ClientSocket1->Active=false;
//ClientSocket1->Address=LedIp;
//ClientSocket1->Port=LEDIpPort;
//ClientSocket1->Open();
ClientSocket1->Active=true;
ClientSocket1->Socket->SendBuf(buf,bufIndex);
//ClientSocket1->Close();
}
catch(...)
{
//
}
}
void __fastcall TMainFrm::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket)
{
///客户端读取信息
try
{
AnsiString Msg=Socket->ReceiveText();
unsigned char buf[100];
if(Msg.Length()<99)
{
strcpy(buf,Msg.c_str());
String ss="";
for(int i=0;i<Msg.Length();i++)
{
ss+=IntToHex(buf[i],2);
ss+=",";
}
InfoLedEdt->Text=ss;
}
///判断是不是自己发出的信息
// if(Msg!=Memo2->Lines->Strings[Memo2->Lines->Count-1])
// Memo2->Lines->Add(Msg);
}
catch(...)
{
//
}
}
void __fastcall TMainFrm::ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket)
{
try
{
AnsiString Msg="连接成功-" + Socket->RemoteHost +"[地址]" + Socket->RemoteAddress + "[端口]" + IntToStr(Socket->RemotePort);
InfoLedEdt->Text=Msg;
}
catch(...)
{
//
}
}
void __fastcall TMainFrm::ClientSocket1Disconnect(TObject *Sender, TCustomWinSocket *Socket)