Java socket通信与C++之间的关系是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联建站长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为邹平企业提供专业的网站建设、网站设计,邹平网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。
c++builer与Java socket通信是我们在编程中经常用到的,有不少的人还有很多问题需要解决。下面我们就来看看如何解决有关于Java socket通信与C++之间的相关问题。希望大家有所了解。
C++builer与Java都提供了功能丰富的socket控件/类。这里将实现c++builer与Java之间的socket通信,能够使双方互相发送信息。在C++builer里,我们采用 ServerSocket控件做为服务器端,Java socket通信里采用Socket类做为客户端。本示例中互相发送的都为结构体,在C++builer里定义为:
typedef struct { int int1; float f; char ch[20]; double d; } TMyMsg;
Java里发送部分是直接用的DataOutputStream 的writeXXX方法,当然也可以用内部类转换成byte[]进行发送。
源代码如下:
C++builer服务器端Unit1.cpp
#include
#pragma hdrstop
#include "Unit1.h"
#include
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ServerSocket1->Active = true;
}
void __fastcall TForm1::BtnSendClick(TObject *Sender)
{
//发送的数据要进行字节序转换.
TMyMsg sendmsg;
sendmsg.int1 = htonl(30);
sendmsg.f = ntohf(12.345);
strcpy(sendmsg.ch,"测试数据!");
sendmsg.d = ntohd(67.890);
ServerSocket1->Socket->Connections[0]->SendBuf(&sendmsg,
sizeof(TMyMsg));}
void __fastcall TForm1::FormShow(TObject *Sender)
{
MemoSend->Lines->Add("int : 30");
MemoSend->Lines->Add("float : 12.345");
MemoSend->Lines->Add("char [20] : 测试数据!");
MemoSend->Lines->Add("double : 67.890");
}
void __fastcall TForm1::ServerSocket1ClientRead(TObject
*Sender,TCustomWinSocket *Socket)
{
//接收的数据字节序转换
TMyMsg remsg;
Socket->ReceiveBuf(&remsg,sizeof(TMyMsg));
int int1 = ntohl(remsg.int1);
float f = ntohf(remsg.f);
char *ch = new char[20];
strcpy(ch,remsg.ch);
AnsiString sch = StrPas(ch);
double d = ntohd(remsg.d);
delete [] ch;
MemoRec->Lines->Add(int1);
MemoRec->Lines->Add(f);
MemoRec->Lines->Add(sch.Trim());
MemoRec->Lines->Add(d);
}
看完上述内容,你们掌握Java socket通信与C++之间的关系是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!