社区编辑申请
注册/登录
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里定义为:

  1. typedef struct  
  2. {  
  3. int int1;  
  4. float f;  
  5. char ch[20];  
  6. double d;  
  7. } TMyMsg; 

 

Java里发送部分是直接用的DataOutputStream 的writeXXX方法,当然也可以用内部类转换成byte[]进行发送。

源代码如下:

C++builer服务器端Unit1.cpp

 

 

  1. #include <vcl.h> 
  2. #pragma hdrstop  
  3. #include "Unit1.h"  
  4. #include <winsock.h> 
  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);  

 

以上就是Java socket通信和C++之间进行通信的相关问题介绍。

【编辑推荐】

  1. Java Socket对象原理的详细介绍
  2. Java Socket服务端具体命令编写
  3. Java Socket通讯客户端代码编写教程
  4. Java Socket通讯实际操作手册
  5. Java Socket通讯客户端代码详解
责任编辑:张浩 来源: 互联网
相关推荐

2012-03-19 11:41:30

JavaSocket

2015-09-08 10:06:18

2019-10-22 08:11:43

Socket网络通信网络协议

2015-03-10 13:43:00

JavaSocket编程编程

2020-01-09 09:50:32

C++JavaPython

同话题下的热门内容

超全!Python图形界面框架PyQt5使用指南!太强了!Python 开发桌面小工具,让代码替我们干重复的工作!Python居然被用来开发游戏了?盘点你想不到的Python开发场景浅谈Python+requests+pytest接口自动化测试框架的搭建跟着 Guava 学 Java 之 不可变集合Python轻量级Web框架:Bottle库!用 Taichi 加速 Python:提速 100+ 倍!实战 | 如何用 Python 自动化监控文件夹完成服务部署!

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号