整个包的定义包括
head 2byte
length
crc16 校验
flag
content 内容
end我对网络编程这块没接触过,希望大家指点下资料或者代码看看,有人讲解下java里发送和接受数据包的一些关键点,非常感谢
有资料最好

解决方案 »

  1.   

    我也对网络编程这块没接触过,希望大家指点下资料或者代码看看,有人讲解下java里发送和接受数据包的一些关键点,非常感谢
      

  2.   

    《TCP.IP协议详解》讲解的很详细
      

  3.   

    我这有段代码用于接收字节流。楼主可以参考一下public byte[] readXmlBytesFromSocket(Socket socket) throws IOException, ReadXmlBytesException{
    InputStream bis = socket.getInputStream();
    byte[] lengthBytes = new byte[4];
    if (bis.read(lengthBytes, 0, 4) == 4) {
    int length = Util.bytesToint(lengthBytes);
    int rest = length;
    byte[] messageBytes = new byte[length];
    int read = 0;
    while (rest > 0) {
    byte[] buffer = new byte[rest];
    read = bis.read(buffer);
    if(read > length || rest < 0){
    throw new ReadXmlBytesException("读取xml字节流溢出");
    }
    else {
    System.arraycopy(buffer, 0, messageBytes, length - rest, read);
    rest -= read;
    }
    }
    return messageBytes;
    } else {
    throw new ReadXmlBytesException("获取数据长度失败");
    }
    }
      

  4.   

    这东西可不是一句两句能说清楚的,你定义的结构基本上也够了。header 里最好加上消息序号,用于判断收到的消息是哪条消息的响应,以及表示请求消息,还是响应消息的标识。消息序号可以使用 UUID(需要 16 个字节),或者其他自行设计的不会重复的标识。
      

  5.   

            /** Source port number */
    public int src_port;
    /** Destination port number */
    public int dst_port;
    /** Sequence number */
    public long sequence;
    /** ACK number */
    public long ack_num;
    /** URG flag */
    public boolean urg;
    /** ACK flag */
    public boolean ack;
    /** PSH flag */
    public boolean psh;
    /** RST flag */
    public boolean rst;
    /** SYN flag */
    public boolean syn;
    /** FIN flag */
    public boolean fin;