编写Socket客户端和服务器程序,客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中。

xmmxjycqupt 2014-07-18 09:28:21

2. 编写Socket客户端和服务器程序,客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中。
消息格式:
字段 长度(单位字节) 内容
--------------------------------------------------------------------
len 8 整个消息长度,不包括这4个字节,类型为long
file_name_length 1 文件名长度,byte
file_name file_name_length 文件名,String
data_length 8 文件数据长度,long
data data_length 文件数据
mac 8 消息的MAC码,byte
客户端执行:
java FileClient -i 192.168.1.171 -p 8888 -f localFileName -r remoteFileName
服务器能连续不断的服务。
这个消息格式怎么解读了,没看明白,谢谢大家了
...全文
931 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
致知Fighting 2014-07-18
  • 打赏
  • 举报
回复
引用 3 楼 xmmxjycqupt 的回复:
[quote=引用 1 楼 ygycomon 的回复:] 就是你把收到的消息丢进byte数组里,头8位读出来是一个long,代表消息的长度。下一位是文件名的长度,byte型。然后在读出上一步读的byte这么长的位数,这就是文件名,后面的依此类推
是不是应该是这样的,本地文件保存的应该光指上面消息中的data,服务器通过解析这个data以及获取客户端的信息,得出这样的消息格式的数据,存储到文件中。[/quote] 客户端按照这个协议(格式)把数据发给你,你按照这个协议解析数据,把文件数据读出来写进文件,把文件名数据读出来给文件命个名,就这么简单
secret32 2014-07-18
  • 打赏
  • 举报
回复
引用 4 楼 xmmxjycqupt 的回复:
[quote=引用 2 楼 secret32 的回复:] len 8 整个消息长度,不包括这4个字节,类型为long ===================================================== 首先 后面写的不包括这4个字节 而长度为8字节 是否笔误? 我当做8字节讲 你的整个消息是这样的: 消息长度 文件名长度 文件名 文件数据长度 文件数据 mac码 读取时按字节读取 头8个字节是总消息的长度(不包括这8个字节) 第9个字节是文件名的长度,假设为x字节 从第10个字节开始的x个字节就是文件名 从(10+x)个字节开始的8个字节就是文件数据的长度,假设为y字节 从第(10+x+8)个字节开始的y个字节就是文件数据 从第(10+x+8+y)个字节开始的8个字节就是消息mac码 这样消息就读完了 正常的话 这时候从第9个字节到mac码结束的总长度应该是等于消息长度的,可以做个校验, 接收到这个长度的字节数后就不再接受本条消息的后续字节(如果有的话)了
你看我说的这个对吗?是不是应该是这样的,本地文件保存的应该光指上面消息中的data,服务器通过解析这个data以及获取客户端的信息,得出这样的消息格式的数据,存储到文件中。谢谢你了![/quote] 本地文件保存的应该只是data, 客户端应该先读取本地文件并包装成指定的消息格式,然后传给服务器
xmmxjycqupt 2014-07-18
  • 打赏
  • 举报
回复
引用 2 楼 secret32 的回复:
len 8 整个消息长度,不包括这4个字节,类型为long ===================================================== 首先 后面写的不包括这4个字节 而长度为8字节 是否笔误? 我当做8字节讲 你的整个消息是这样的: 消息长度 文件名长度 文件名 文件数据长度 文件数据 mac码 读取时按字节读取 头8个字节是总消息的长度(不包括这8个字节) 第9个字节是文件名的长度,假设为x字节 从第10个字节开始的x个字节就是文件名 从(10+x)个字节开始的8个字节就是文件数据的长度,假设为y字节 从第(10+x+8)个字节开始的y个字节就是文件数据 从第(10+x+8+y)个字节开始的8个字节就是消息mac码 这样消息就读完了 正常的话 这时候从第9个字节到mac码结束的总长度应该是等于消息长度的,可以做个校验, 接收到这个长度的字节数后就不再接受本条消息的后续字节(如果有的话)了
你看我说的这个对吗?是不是应该是这样的,本地文件保存的应该光指上面消息中的data,服务器通过解析这个data以及获取客户端的信息,得出这样的消息格式的数据,存储到文件中。谢谢你了!
xmmxjycqupt 2014-07-18
  • 打赏
  • 举报
回复
引用 1 楼 ygycomon 的回复:
就是你把收到的消息丢进byte数组里,头8位读出来是一个long,代表消息的长度。下一位是文件名的长度,byte型。然后在读出上一步读的byte这么长的位数,这就是文件名,后面的依此类推
是不是应该是这样的,本地文件保存的应该光指上面消息中的data,服务器通过解析这个data以及获取客户端的信息,得出这样的消息格式的数据,存储到文件中。
secret32 2014-07-18
  • 打赏
  • 举报
回复
len 8 整个消息长度,不包括这4个字节,类型为long ===================================================== 首先 后面写的不包括这4个字节 而长度为8字节 是否笔误? 我当做8字节讲 你的整个消息是这样的: 消息长度 文件名长度 文件名 文件数据长度 文件数据 mac码 读取时按字节读取 头8个字节是总消息的长度(不包括这8个字节) 第9个字节是文件名的长度,假设为x字节 从第10个字节开始的x个字节就是文件名 从(10+x)个字节开始的8个字节就是文件数据的长度,假设为y字节 从第(10+x+8)个字节开始的y个字节就是文件数据 从第(10+x+8+y)个字节开始的8个字节就是消息mac码 这样消息就读完了 正常的话 这时候从第9个字节到mac码结束的总长度应该是等于消息长度的,可以做个校验, 接收到这个长度的字节数后就不再接受本条消息的后续字节(如果有的话)了
致知Fighting 2014-07-18
  • 打赏
  • 举报
回复
就是你把收到的消息丢进byte数组里,头8位读出来是一个long,代表消息的长度。下一位是文件名的长度,byte型。然后在读出上一步读的byte这么长的位数,这就是文件名,后面的依此类推

62,635

社区成员

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

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