[quote=引用 2 楼 xjq2003 的回复:] 我想通过网络向设备(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) { AnsiString Msg="信息显示屏连接断开..." ; InfoLedEdt->Text=Msg; } //------------------------------------------------ 引用 10 楼 songhtao 的回复: ClientSocket在bcb2009中 好像有问题,建议用indy的TIdTcpClient TIdTcpClient怎么用啊,没有用过,给点提示可以吗? 问题还是有的,就是显示屏如果不和计算机联网的话,会弹出来SOCKET error对话框,不爽,程序启动也比较慢。如何解决我还没有搞明白 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(...) { // } } 去掉ClientSocket1->Active=true; 程序就不会一直弹出来SOCKET error对话框 注意:bcb2009中需要安装sicket控件包
我想通过网络向设备(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) { AnsiString Msg="信息显示屏连接断开..." ; InfoLedEdt->Text=Msg; } //------------------------------------------------ 引用 10 楼 songhtao 的回复: ClientSocket在bcb2009中 好像有问题,建议用indy的TIdTcpClient TIdTcpClient怎么用啊,没有用过,给点提示可以吗? 问题还是有的,就是显示屏如果不和计算机联网的话,会弹出来SOCKET error对话框,不爽,程序启动也比较慢。如何解决我还没有搞明白 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(...) { // } } 去掉ClientSocket1->Active=true; 程序就不会一直弹出来SOCKET error对话框 注意:bcb2009中需要安装sicket控件包
1,313
社区成员
8,875
社区内容
加载中