`
bjmike
  • 浏览: 282939 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C/C++与java网络通信问题汇总及解决方法

阅读更多
前段时间做了一个简单的C/S系统, 分别用C++和java开发服务端和客户端, 并通过tcp通信. 以前没有这方面的经验, 只是知道理论上可行, 实际上还有不少问题要注意.
本文会陆续扩充和修改.

项目1: 校园导航 2006.6
平台: X86, windowsXP+SP2, mingw3.4.5, jdk1.5.0_06
C++:socket, send, recv
java: Socket, DataInputStream, DataOutputStream
1. 字节序, C++在不同的平台上有不同的字节序, X86上是little-endian, solaris上是big-endian; 而java在所有平台上都默认是big-endian, 所以在传输诸如short,int,long数据时要在C++转换成网络序(big-endian)

2. 字符编码, C++上最普遍的是采用mbcs, 而java上是用unicode(并且和标准的unicode还有些区别,可以参考java文档), 所以除非必须否则不要传字符串, 可以传文本文件代替, 一定要传的话只能自己转换了

3. 内存对齐, 在C/C++的网络通信程序中经常采用读写结构体的方式方便地交换数据, 但是不注意的话结构体内很可能有空隙, 比如struct A{ int a; char c }; struct B{ char a; int b }; 这两个结构体内都有空隙, 而如果不说明空隙的存在java程序是不会知道的, 就会导致双方解析时出错. 要消除空隙应该小心地安排结构体的成员, 不推荐使用#pragma pach(1), 因为没有通用性

4. 位域, 除非小心安排, 否则位域导致的结构体大小与平台相关, int a:4所占用的字节随平台和编译器变化(char a:4相对稳定占1字节)

4. (可能平台相关)传送与接收速度不同, 当C++向java传送一个大一些的数据时, 可能C++一边已经传完退出了, 而java那边还没收完, 导致最后的一部分数据丢失. 所以项目中采用了简单的确认机制, 任何一方接收完数据就回送1字节的确认, 以防止C++过早退出

5. (可能平台相关)java在同C++建立连接后以及在C++向java传送完一段数据后, java若向C++传送一段数据则第一次传送的数据C++只能收到一个字节, 第一次过后恢复正常

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Michaelgs/archive/2006/07/18/934116.aspx
分享到:
评论

相关推荐

    java笔试题汇总和C/C++笔试题汇总

    Java和C/C++是计算机科学中的重要编程语言,尤其在软件开发、系统级编程和高性能计算领域广泛应用。这篇概述将深入探讨这两个领域的常见笔试题型,以帮助求职者准备IT公司的招聘过程。 Java笔试题主要涵盖了以下几...

    Java基础知识汇总_java_

    Java提供了Thread类和Runnable接口来创建和管理线程,还有同步机制(如synchronized关键字,wait(),notify()和notifyAll()方法)用于解决多线程环境下的数据安全问题。 I/O流是Java进行输入输出操作的基石,包括...

    Andorid JAVA IOS 全套汇总

    1. Swift/Objective-C:理解这两种语言的语法和特性,Swift更现代,Objective-C则更接近C/C++。 2. iOS SDK:包括UIKit框架,提供创建用户界面和处理事件的工具。 3. MVC模式:Model-View-Controller架构是iOS开发的...

    cc++java软件测试面试笔试题汇总

    在准备软件测试相关的面试或笔试时,掌握C、C++和Java这三种语言的基本概念以及软件测试的基础知识至关重要。以下是一些可能出现在面试或笔试中的关键知识点: **C语言知识点:** 1. **数据类型**:理解整型、浮点...

    网络面试题面试题汇总

    6. **C++笔试与面试**:C++面试会关注对象导向编程、模板、STL库的使用,以及如何在C++中实现网络通信。 7. **面试与面试题**:面试技巧和常见面试问题的准备是求职者必须关注的,如自我介绍、项目经验分享、问题...

    java周刊,学习参考用

    I/O流处理在读写文件、网络通信等方面起到关键作用,Java提供了丰富的类库支持。网络编程则涉及Socket编程,允许Java程序创建网络应用。数据库连接是通过JDBC(Java Database Connectivity)实现的,让Java可以与...

    计算机网络和数据库面试问题汇总

    以上是计算机网络和数据库面试问题汇总中的核心知识点,每个知识点背后都有丰富的细节和应用场景,是IT专业人员面试准备中的重要部分。在实际的面试中,面试官可能会针对这些知识点进行深入探讨,考察应聘者对理论...

    Java笔试面试题大汇总上

    这些题目旨在考察候选者对Java核心概念的理解以及实际应用能力,包括并发控制、网络通信等关键技能。在面试或笔试中,这类问题可以帮助评估候选者的编程能力和问题解决能力。对于Java开发者来说,熟练掌握这些知识点...

    华为校园招聘历年经典面试题汇总:C++研发岗1

    以上知识点涵盖了软件开发的多个方面,包括框架理解、数据库操作、操作系统原理、并发编程、数据结构与算法、网络通信、设计模式等,都是程序员需要掌握的基础技能。深入理解和实践这些知识点对于提升编程能力、解决...

    java技术架构图汇总.doc.pdf

    类加载器负责加载类文件,运行时数据区存储程序运行时的数据,执行引擎执行字节码,本地方法接口用于调用非Java语言编写的代码,如C或C++。 2. **Hibernate架构**:Hibernate是一个对象关系映射(ORM)框架,简化了...

    java面试汇总,里面整理很多技术点

    - **丰富的类库**:Java标准库提供了大量预定义的类和接口,用于各种功能,如网络通信、I/O操作、数据库连接等。 - **面向对象**:Java是完全面向对象的语言,支持封装、继承和多态。 - **平台无关性**:Java应用...

    私藏资源!2020超全Java汇总免费领取.rar

    7. **网络编程**:Java提供了丰富的API用于网络通信,如Socket编程,方便开发网络应用。 8. **反射机制**:Java反射机制允许在运行时动态地获取类的信息并调用其方法,是Java强大的功能之一。 9. **泛型**:泛型...

    2022年人行考试试题汇总宣贯.pdf

    - 路由器会根据路由表更新其路径选择,以优化网络通信。 5. 数据库管理: - SQL语句用于查询数据库,例如:`SELECT * FROM 表 WHERE selldate BETWEEN '2002-3-15' AND '2008-6-23' AND deptno='01'`。 - 关系...

    阿里巴巴校园招聘历年经典面试题汇总:C++研发 1

    12. **动态规划原理与本质**:动态规划是一种解决最优化问题的数学方法,通过构建子问题并存储解,避免重复计算,通常能达到全局最优解。 13. **01背包问题**:经典的动态规划问题,目标是在容量有限的背包里选择...

    125条常见的java面试笔试题大汇总

    - 了解Java的起源及其与C++的区别。 - 掌握Java的三大特性:封装、继承和多态。 - 理解Java虚拟机(JVM)的工作原理和内存模型。 2. **数据类型**: - 分析Java中的基本数据类型和引用数据类型。 - 理解自动...

    03.LinuxC++ 突击极简版(三个月)

    3. **C++的竞争力**:C++相比Java等语言,上手难度稍高,但竞争相对较小,尤其适合有C语言基础的学员。C++应用广泛,如服务器后台开发、自动驾驶等,但不推荐初学者直接进入MFC或QT等桌面客户端开发。 4. **时间...

    【JavaSE】Java 知识汇总(资源,工具,笔记,源码,文章,文档分类整理).zip

    软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...

Global site tag (gtag.js) - Google Analytics