当前位置: 代码迷 >> J2SE >> java中socket编程自定义tcp数据包构造等
  详细解决方案

java中socket编程自定义tcp数据包构造等

热度:2750   发布时间:2013-02-25 00:00:00.0
java中socket编程自定义tcp数据包结构等
整个包的定义包括
head 2byte
length
crc16 校验
flag
content 内容
end

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

------解决方案--------------------------------------------------------
北京圣思园教育,张龙主讲的那个视频,对这儿有讲解,讲得挺基础的,你可以下下来,看一下
------解决方案--------------------------------------------------------
《TCP.IP协议详解》讲解的很详细
------解决方案--------------------------------------------------------
我这有段代码用于接收字节流。楼主可以参考一下
Java code
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("获取数据长度失败");        }    }
------解决方案--------------------------------------------------------
这东西可不是一句两句能说清楚的,你定义的结构基本上也够了。

header 里最好加上消息序号,用于判断收到的消息是哪条消息的响应,以及表示请求消息,还是响应消息的标识。

消息序号可以使用 UUID(需要 16 个字节),或者其他自行设计的不会重复的标识。
------解决方案--------------------------------------------------------
/** 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;
  相关解决方案