谨以此文记录曾经的硝烟,如果还能给大家带来一丢丢的帮助,那是再好不过的事情。
任务要求:1、请求需要下载数据的总大小;
2、使用Socket从服务器分段下载字节流数据(byte[]数据);
3、以byte[]的形式追加保存到.txt文件中。
一、请求数据大小
这里的Socket、OutputStream、InputStream声明的全局,因为业务需求"请求数据的大小"和"下载数据"要一气呵成,即请求完数据大小之后,需要在短时间内用同一个Socket链接立马请求下载数据,如果间隔时间太长(大概几十秒)或再次new Socket的话,就请求不到任何数据了。
private Socket socket;
private OutputStream socketWriter;
private InputStream socketReader;
private void socketConnect(final String sizeStr, final String downStr, final String nameStr) {
new Thread(new Runnable() {
@Override
public void run() {
try {
socket = new Socket(Constants.CONTROLLER_IP, Constants.PORT_TCP);
getFileSize(sizeStr, downStr, nameStr);
} catch (IOException e) {
e.printStackTrace();
udpSend();
}
}
}).start();
}
/**
* 请求文件大小
* sizeStr:请求文件大小所需参数
* downStr:文件下载所需参数
* nameStr:保存文件所需参数
*/
private void getFileSize(String sizeStr, String downStr, String nameStr) {
try {
//向服务器端发送消息
socketWriter = socket.getOutputStream();
socketWriter.write(OrderUtils.hexStringToBytes(sizeStr)); //业务需求传递参数为16进制字节码
socketWriter.flush();
//接收来自服务器端的消息
socketReader = socket.getInputStream();
byte[] b = new byte[16]; //服务器返回数据长度固定为16字节
socketReader.read(b);
byte[] cBytes = new byte[4]; //创建4个字节码的字节数组