白日何短短,百年苦易满

JAVA文件传输(Server端)

 

注:注意细节,例如:如何得到协议的子字符串、各种数据流的转换

public static void main(String[] args) {
try { //创建server对象
ServerSocket server=new ServerSocket(5121);
//创建socket对象
Socket sok=server.accept();//监听客户端发送过来的连接 监听到客户端连接请求 才往下执行
//读取客户端发送的数据 先要知道文件名、大小 然后再在本地创建
BufferedReader get= new BufferedReader(new InputStreamReader(sok.getInputStream()));//收到的流只能转换为字符串???
//================================================================================================
//接收文件 先接收客户端传过来的协议,分割协议, 根据协议创建文件 再将流写入其中
String str=get.readLine();//读取一个文本行
//得到客户端发送的请求的命令码
int index1=str.indexOf(“/$”);//指定字符串第一次出现的位置
String xieyi=str.substring(0, index1);
if(!xieyi.equals(“888”)){//判断是否是客户端发送的那个自己定义的协议码888
System.out.println(“协议不正确!”);
return;
}
//得到文件名、大小
String str2=str.substring(index1+2);//得到文件名+文件大小的子字符串
int nameIndex= str2.indexOf(“/$”);//得到文件名子字符串的下标
String filename=str2.substring(0, nameIndex);//得到文件名子字符串
String fileLength=str2.substring(nameIndex+2);//得到文件大小子字符串
//在服务器端根据接收的协议 在服务器创建文件
File serverFile=new File(“C:\\”,filename);
FileOutputStream fileout=new FileOutputStream(serverFile);//后面 将数组中存放的客户端传过来的流写入文件
if(!serverFile.exists()){//如果服务器没此文件 则创建
serverFile.createNewFile();

}
// else{
// System.out.println(“文件已存在,接收文件会将此文件进行覆盖”);
// }
int m=0;//记录每次接收的数据的长度
int count=0;//记录已经接收的数据长度
//准备好后 接下来服务器端开始接收文件
byte [] byArray=new byte [1024*10];//定义一数组接收客服端的数据流
InputStream so=sok.getInputStream();//接收数据字节流
//将文件大小字符串转换为long类型
Long filesize= Long.parseLong(fileLength);
while(count<filesize){
m=so.read(byArray);//读取数据流到数组里面 每次读取的长度
fileout.write(byArray, 0, m);//将二进制数据流写入文件中
fileout.flush();
count+=m;
}
if(fileout!= null){
fileout.close();
}
//================================================================================================
//打印输出客户端发送的消息
while(true){
//向客户端发送信息 获取输出流
OutputStream out= sok.getOutputStream();
//将字节输出流转换为字符输出流
OutputStreamWriter streamwriter=new OutputStreamWriter(out);
//字符缓存流
BufferedWriter bw=new BufferedWriter(streamwriter);
bw.write(“你好 世界\n”);
bw.flush();

//循环打印接收的数据
while(true){
System.out.println(get.readLine());
}
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

未经允许不得转载:徐宏涛博客 » JAVA文件传输(Server端)

分享到:更多 ()

评论 抢沙发

评论前必须登录!