您的位置:首页 > 编程语言 > C语言/C++

Java, C++同时实现SocketClient功能 程序比较

2015-11-27 14:32 666 查看
分别用java,C++写了2个程序,程序实现功能相同,都是socket通信,在Tcp的基础上对接收和发送的数据进行封装处理。UI尽可能的相同,如下图



主要功能简介,以C++为例:

视频参考:http://v.youku.com/v_show/id_XMTM3MzQxMTU2NA==.html

1.连接到服务器后,当没有发现终端的时候,点击终端一行的按钮提示“还没有发现终端”



2。发现终端后,自动添加终端的短地址到下拉框里面,点击按钮后,发送相应的指令,并且红字更新解释收到的信息



3.点击下拉框可以选择控制不同的终端:



开始比较:

1.比较大小



2.比较源码个数

c++



java

就一个文件

SocketClient.java

3.比较源码大小:

c++:


java



表面的比较就是这些。

作为编程者,由于作者亲自编写了这2个程序,先写的是java程序,后写的是c++程序,后面写c++程序的时候由于算法什么的都有了,主要的就是实现过程。而写java程序的时候还有一部分时间花在了构思算法上面。

开发环境不一样,java用的ide是eclispe,c++用的是vs2008,java的ui靠的是一条一条代码实现的,不是实时的,而且有专门的布局管理器,所以布局管理器定下来了布局基本就是java自己本身定的,想更改什么细微的(例如控件左移一个像素)很费劲,但是对于窗口放大缩小基本不用管,布局管理器已经设计好了;而c++是一个控件一个控件画出来的,所见即所得,但是放大缩小窗口什么的需要用户自己去更改里面的控件的大小。
java编程主要是实现了一个类,在该类里面调用main方法,其余的类写在类中,可以用类中类的方法,因为在一个类中,访问一些方法非常容易;c++创建的时候模板已经定好,源文件也已经定好,几个类分布在不同的cpp文件中,用mfc编写程序看不到main方法,由其他程序调用,一个类中想访问另外一个类中的方法不能直接访问,通过theApp变量访问。
java的消息处理基本都是实例化另外一个类,例如this.addWindowListener(new WindowAdapter() {}),这同时意味着有些对于一些接口adapter,就必须重写实现接口里面没有实现的方法,所以类中类或者匿名类是缺不了的,并且大量存在;c++处理消息的思想是消息与方法绑定,通过类似这种消息map实现消息处理
BEGIN_MESSAGE_MAP(CtcpclientDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_Connect, &CtcpclientDlg::OnBnClickedConnect)
ON_BN_CLICKED(IDC_Send, &CtcpclientDlg::OnBnClickedSend)
ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON02, IDC_BUTTON10, OnButtonCoordinatorClicked)
ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON12, IDC_BUTTON20, OnButtonEndianClicked)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &CtcpclientDlg::OnNMCustomdrawSlider1)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER2, &CtcpclientDlg::OnNMCustomdrawSlider2)
ON_BN_CLICKED(IDC_Clear, &CtcpclientDlg::OnBnClickedClear)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
至于怎么实现的底层已经封装了,作为开发者不用管,方正写好消息绑定后以后只要来了该消息就会跳转到该消息的处理函数,程序看起来比较简洁。
java 的socket 通信中try catch到处可见;而c++中继承的是socket类,提供的方法以及返回值也比较明确,写程序的时候基本没用try catch,可能还是受C语言的影响。
java默认Unicode编码,字符转换基本不用考虑;在c++中字符的转换折腾了很久,char* w_char*,CString他们之间相互的转换很繁琐,很麻烦。
这个程序里面用到的json,java由于开源,经过多方面的考虑,采用gson,功能很多,基本都能满足需求;c++里面的json用的是rapidjson,没有用太明白,有的地方还是有些迷惑。
程序中红字的部分,java只需要一句话就够了
lState.setBackground(new Color(240, 240, 240));
C++需要重写OnCtlColor方法,在方法里面更改
if (pWnd->GetDlgCtrlID() == IDC_State)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,0, 0));
}


对于socket通信来讲,c++消息处理的机制令人非常满意,用起来也比较方便;而java使用一种轮询等待的方式来判断是否有新的消息,的新开一个进程来监视是否有新的消息到来,虽然java的有异步通信,但是本质来说死守。

当然区别还有很多,毕竟是两种不同的编程语言,但是他们的思想都是面向对象的思想,所以总的思想还是一样的。一旦会了一种变成语言对于学习另外一种编程语言肯定是有帮助的,当然实践出真知。

程序下载地址:Zigbee终端控制台

更多资料请:web.nenewind.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: