最近在做一个项目,关于java和c++通讯方面的.通讯时发给服务器端(c++)的数据大小不一致,后来检查发现可能是我这边的java数据包定义的有错.现在给出了c++服务器端数据包的定义:
 struct PACKAGE
{
//包头标志
UINT nBeginFlag; //包头头标志 long lPackageID; //包标识ID。(每个包的ID必须不同,不过进程重新启动后,ID可以重新开始)
UINT nPackageLen; //包的总长度
UINT nBuffLen; //包缓存区长度(byteBuff 区的大小)
char chSocketID[SOCKET_ID_LENTH];//套接的ID号。 //包尾标志
UINT nEndFlag; //包头尾标志 UINT nSessionID; //会话ID
BYTE byteBuff[INITBUFFLENTH];//数据包缓冲区
};
typedef PACKAGE* PPACKAGE;请问一下,在客户端,我该用java怎么去定义这个数据包,才能让两边接受的数据包大小一致呢?在协议上有什么细节需要注意呢?谢谢大家!

解决方案 »

  1.   

    大小不一緻 你這裡可能出現2個情況吧
    1是傳過來的數據不完整 2是數據沒有完全還原
    如果是使用Socket傳輸 Java這邊用InputStream接 情況1就不會出現
    如果是情況2的話 可能就是Java這邊類的定義出問題了 協議不一緻
      

  2.   

    C++和Java的数据类型是不同的,比如长度,所以我觉得应该把Java的数据都转化成C++的.然后再传输!
    具体没做过,没经验
      

  3.   

    在c和c++中,int表示的整型与平台相关的。16位的8086机器上int占2字节,在32位的sun Sparc机器上,int占4字节;到inter的时候,就跟操作系统有关系了,dos和windows3.1中int占2字节,当windows使用32位模式时int占4字节。java中所有的数值类型所占字节的数量跟平台无关。
      

  4.   

    在java端需要把欲发送的内容转换为字节数组再发送,
    比较不容易出错.
      

  5.   

    接收,发送时使用DataInputStream和DataOutputStream.