千家信息网

Java socket通信与C++之间的关系是什么

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,Java socket通信与C++之间的关系是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。c++builer与Java socke
千家信息网最后更新 2025年11月09日Java socket通信与C++之间的关系是什么

Java socket通信与C++之间的关系是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

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

  1. #include

  2. #pragma hdrstop

  3. #include "Unit1.h"

  4. #include

  5. #pragma package(smart_init)

  6. #pragma resource "*.dfm"

  7. TForm1 *Form1;

  8. __fastcall TForm1::TForm1(TComponent* Owner)

  9. : TForm(Owner)

  10. {

  11. }

  12. void __fastcall TForm1::Button1Click(TObject *Sender)

  13. {

  14. ServerSocket1->Active = true;

  15. }

  16. void __fastcall TForm1::BtnSendClick(TObject *Sender)

  17. {

  18. //发送的数据要进行字节序转换.

  19. TMyMsg sendmsg;

  20. sendmsg.int1 = htonl(30);

  21. sendmsg.f = ntohf(12.345);

  22. strcpy(sendmsg.ch,"测试数据!");

  23. sendmsg.d = ntohd(67.890);

  24. ServerSocket1->Socket->Connections[0]->SendBuf(&sendmsg,
    sizeof(TMyMsg));

  25. }

  26. void __fastcall TForm1::FormShow(TObject *Sender)

  27. {

  28. MemoSend->Lines->Add("int : 30");

  29. MemoSend->Lines->Add("float : 12.345");

  30. MemoSend->Lines->Add("char [20] : 测试数据!");

  31. MemoSend->Lines->Add("double : 67.890");

  32. }

  33. void __fastcall TForm1::ServerSocket1ClientRead(TObject
    *Sender,

  34. TCustomWinSocket *Socket)

  35. {

  36. //接收的数据字节序转换

  37. TMyMsg remsg;

  38. Socket->ReceiveBuf(&remsg,sizeof(TMyMsg));

  39. int int1 = ntohl(remsg.int1);

  40. float f = ntohf(remsg.f);

  41. char *ch = new char[20];

  42. strcpy(ch,remsg.ch);

  43. AnsiString sch = StrPas(ch);

  44. double d = ntohd(remsg.d);

  45. delete [] ch;

  46. MemoRec->Lines->Add(int1);

  47. MemoRec->Lines->Add(f);

  48. MemoRec->Lines->Add(sch.Trim());

  49. MemoRec->Lines->Add(d);

  50. }

看完上述内容,你们掌握Java socket通信与C++之间的关系是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0