在TCP的socket编程中,应该怎么对数据包进行传输?例如: 这个是整个IP包的定义。 
#pragma pack(1)//设定为4字节对齐 
//定义数据包包头,所有的数据包均包含此包头. 
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];//数据包缓冲区 
}; 其中 byteBuff 是存放业务消息的。业务消息形式如下:1|2|pio|2||223|38258421|2|6|123456,这个也是包体的内容. 
我在处理包是该怎么办才好,以前没有接触过这样的东西,望大家指教,能给点提示,先谢谢了~~ 

解决方案 »

  1.   

    可不可以这样,把整个数据包转换成字符串类型,然后再转成byte[]数组类型,在网络上进行传输?我不知道该不该关心包里面的内容,但是我发送数据包之后,要等对方接受到包之后,根据我包里的内容然后返回一个应答包给我。谁能回答我呀,着急死了~~
      

  2.   

    Java实现Socket编程,一般都是直接传入发送的字符串或者字节,然后由java底层打包完成发送。关于包头和包尾标志的设置在Socket类的方法里都有,直接设置即可(即set进去)
      

  3.   

    数据包在底层打包的情况我是不是不用去管了?还有两点不是很明白,其一,如果传输不同的包时,可不可以设成不同的方法来处理?比方说客户端发送数据包A给服务器端,然后再发一个B数据包给服务器端,能否写成sendA()方法和sendB()方法,如果不行的话有什么好的办法?其二,当服务器端或者客户端接受到别人发来的数据包时,该如何解析数据包,而得到包中有用的信息?怎么处理,有什么好办法?
      

  4.   

    在java中,底层的都封装了,用的时候,只需把数据传入,指定ip就可以了,
    当然,如果你要自己实现底层,那就要去查协议的定义了
      

  5.   

    其实可以将你的数据按照你所定义的包的形式打成byte数组然后通过java的tcp封装方法传输。接受方将数据从tcp包中将你的数据取出然后再作数据包的解析工作。