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

sligner 2012-09-24 01:46:12
整个包的定义包括
head 2byte
length
crc16 校验
flag
content 内容
end

我对网络编程这块没接触过,希望大家指点下资料或者代码看看,有人讲解下java里发送和接受数据包的一些关键点,非常感谢
有资料最好
...全文
1418 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoming262350 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 2 楼 的回复:

北京圣思园教育,张龙主讲的那个视频,对这儿有讲解,讲得挺基础的,你可以下下来,看一下

Hi,我看了下内容涉及的太多,有没具体讲网络编程这块的地址啊
[/Quote]
一百讲以后,就是网络编程了
  • 打赏
  • 举报
回复
其实包的定义可以大同小异,包序号、包数据体长度、等等,关键是要解决你这个结构体是否能正确发送到接收方,接收方能正确拆包过程。因为最容易出现的情况比如粘包也就是多个包叠在一起,或者半包等,这时候你的拆包过程就难了。
一度~~ 2012-09-28
  • 打赏
  • 举报
回复
/** 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;
  • 打赏
  • 举报
回复
这东西可不是一句两句能说清楚的,你定义的结构基本上也够了。

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

消息序号可以使用 UUID(需要 16 个字节),或者其他自行设计的不会重复的标识。
sligner 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

这东西可不是一句两句能说清楚的,你定义的结构基本上也够了。

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

消息序号可以使用 UUID(需要 16 个字节),或者其他自行设计的不会重复的标识。
[/Quote]
大神讲的 一句两句 说不清楚。。。。
我这就想听点关键的地,或者关键的名字也成啊
sligner 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

北京圣思园教育,张龙主讲的那个视频,对这儿有讲解,讲得挺基础的,你可以下下来,看一下
[/Quote]
Hi,我看了下内容涉及的太多,有没具体讲网络编程这块的地址啊
chenjkai1988 2012-09-24
  • 打赏
  • 举报
回复
我这有段代码用于接收字节流。楼主可以参考一下

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("获取数据长度失败");
}
}
杀手 2012-09-24
  • 打赏
  • 举报
回复
《TCP.IP协议详解》讲解的很详细
zhaoming262350 2012-09-24
  • 打赏
  • 举报
回复
北京圣思园教育,张龙主讲的那个视频,对这儿有讲解,讲得挺基础的,你可以下下来,看一下
corn8888 2012-09-24
  • 打赏
  • 举报
回复
我也对网络编程这块没接触过,希望大家指点下资料或者代码看看,有人讲解下java里发送和接受数据包的一些关键点,非常感谢

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧