这是一个Java聊天软件的文件接收部分代码,谁能帮我详细解释一下,谢了!
需要详细的解释,谢了!packageclient;importjava.net.*;importjava.io.*;classuploadserverextendsThr...
需要详细的解释,谢了!
package client;
import java.net.*;
import java.io.*;
class uploadserver extends Thread{
private static Socket clientsocket;
String str;
public uploadserver(String str){
this.str=str;
}
public void run(){
try{ int cc=str.indexOf("/");
String address=str.substring(cc+1); //这样就可以取得/后面的字符串啦。
System.out.println("文件地址"+address);
clientsocket=new Socket(address,7777);
FileRecieve recieve=new FileRecieve(clientsocket);
recieve.start();
}catch(Exception e){}
}
}
public class FileRecieve extends Thread{
private Socket clientsocket;
public FileRecieve(Socket clientsocket){
this.clientsocket=clientsocket;
}
public synchronized void run(){
try{ DataInputStream br=new DataInputStream(clientsocket.getInputStream());
DataOutputStream output=new DataOutputStream(clientsocket.getOutputStream());
byte[] nn=new byte[225];
br.read(nn);
output.write(nn);
output.flush();
byte[] ll=new byte[255];
br.read(ll);
output.write(ll);
output.flush();
String names=new String(nn);
File myfile=new File("e:\\");
String files="e:\\"+myfile.separator+(names.trim());
FileOutputStream out=new FileOutputStream(files);
BufferedOutputStream bw=new BufferedOutputStream(out);
byte ff[]=new byte[1024];
int c=0;
while((c=br.read(ff))!=-1){
bw.write(ff,0,c);
}
bw.close();
output.close();
out.close();
clientsocket.close();
}catch(Exception e){}
}
} 展开
package client;
import java.net.*;
import java.io.*;
class uploadserver extends Thread{
private static Socket clientsocket;
String str;
public uploadserver(String str){
this.str=str;
}
public void run(){
try{ int cc=str.indexOf("/");
String address=str.substring(cc+1); //这样就可以取得/后面的字符串啦。
System.out.println("文件地址"+address);
clientsocket=new Socket(address,7777);
FileRecieve recieve=new FileRecieve(clientsocket);
recieve.start();
}catch(Exception e){}
}
}
public class FileRecieve extends Thread{
private Socket clientsocket;
public FileRecieve(Socket clientsocket){
this.clientsocket=clientsocket;
}
public synchronized void run(){
try{ DataInputStream br=new DataInputStream(clientsocket.getInputStream());
DataOutputStream output=new DataOutputStream(clientsocket.getOutputStream());
byte[] nn=new byte[225];
br.read(nn);
output.write(nn);
output.flush();
byte[] ll=new byte[255];
br.read(ll);
output.write(ll);
output.flush();
String names=new String(nn);
File myfile=new File("e:\\");
String files="e:\\"+myfile.separator+(names.trim());
FileOutputStream out=new FileOutputStream(files);
BufferedOutputStream bw=new BufferedOutputStream(out);
byte ff[]=new byte[1024];
int c=0;
while((c=br.read(ff))!=-1){
bw.write(ff,0,c);
}
bw.close();
output.close();
out.close();
clientsocket.close();
}catch(Exception e){}
}
} 展开
2个回答
展开全部
uploadserver(String str) -》拿到要上传的地址,通过uploadserver.start();启动过程。
在uploadserver里面创建FileRecieve实例,此实例通过socket对象clientsocket,负责完成实际网络连接和读取数据,写在String files="e:\\"+myfile.separator+(names.trim()); 位置。
在uploadserver里面创建FileRecieve实例,此实例通过socket对象clientsocket,负责完成实际网络连接和读取数据,写在String files="e:\\"+myfile.separator+(names.trim()); 位置。
追问
麻烦你能不能详细点呢,一句一句的,刚开始学Java,好多东西不会,我会加分的!
追答
String address=str.substring(cc+1); //这样就可以取得/后面的字符串啦。
截取字符串,获得应该是IP地址
System.out.println("文件地址"+address);
打印地址
clientsocket=new Socket(address,7777);
生成socket类,地址+端口7777
FileRecieve recieve=new FileRecieve(clientsocket);
创建新类FileRecieve
recieve.start();
默认会调用 recieve-》run()
DataInputStream br=new DataInputStream(clientsocket.getInputStream());
得到输入文件句柄
DataOutputStream output=new DataOutputStream(clientsocket.getOutputStream());
得到输出文件句柄
byte[] nn=new byte[225];
br.read(nn);
读225个字节从socket里,发送给你的信息
output.write(nn);
output.flush();
写225个字节到socket里,要发送的信息
byte[] ll=new byte[255];
br.read(ll);
output.write(ll);
output.flush();
同上
String names=new String(nn);
File myfile=new File("e:\\");
String files="e:\\"+myfile.separator+(names.trim());
定义文件路径和名称
FileOutputStream out=new FileOutputStream(files);
BufferedOutputStream bw=new BufferedOutputStream(out);
byte ff[]=new byte[1024];
int c=0;
while((c=br.read(ff))!=-1){
从网络读取数据
bw.write(ff,0,c);
将数据写入文件
}
bw.close();
output.close();
out.close();
clientsocket.close();
展开全部
首先FileRecieve类是一个线程类,实现其中的run方法就是这个新线程的入口方法,当调用start方法时会新产生一个线程运行run方法,之后就进行流的读取和写入,说实话,如果你会英文和一点IO编程知识的话,这段代码很简单,你挨句翻译就是其意义了。
追问
能不能详细点呢,一句一句的,刚开始学Java,好多东西不会!
追答
这个显然是一个网络和文件的IO(读取与写入)操作,如果你真的是初学者的话,建议你先学简单的,而且可以参与Java API帮助文档,那个上面详细的写了每一个类的说明,这个需要记忆力的,这里帮你写出来意义不大,而且要花大量的时间,如果你没有帮助文档,可以给我发邮件,我回给你,470940595@qq.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询