这是客户端的部分程序: public void client(int s) { byte[] ff; int size; Socket clientSocket; PrintStream ps; String fileName;try { // 创建一个发送的Socket clientSocket = new Socket(QQ.IP, 8765); ps = new PrintStream(clientSocket.getOutputStream()); size = (int) Myfile[s].length(); fileName = Myfile[s].getName(); BufferedReader br = new BufferedReader(new InputStreamReader( clientSocket.getInputStream())); String over = "\n"; byte pp[] = over.getBytes(); byte byname[] = (fileName + over).getBytes(); System.out.println(new String(byname)); //文件名 ps.write(byname); ps.flush(); String gh = br.readLine(); String tmp; tmp = String.valueOf(size) + over; byte bySize[] = tmp.getBytes(); //文件大小 ps.write(bySize); ps.flush(); String jj = br.readLine(); ReadT2 += "已发送的文件为" + gh.trim() + ";大小为" + jj.trim() + " "; T[3].setText(ReadT2); //文件内容 FileInputStream in = new FileInputStream(Myfile[s]); BufferedInputStream bf = new BufferedInputStream(in); ff = new byte[2048]; int c; while ((c = bf.read(ff)) != -1) { ps.write(ff, 0, c); ps.flush(); }ps.close(); bf.close(); in.close(); clientSocket.close(); T[s].setText("发送完毕,请选择下个文件!"); T[s].setText(""); } catch (Exception e) { System.out.println(e.toString()); } } 这是服务端的部分程序: public synchronized void run() { // TODO: Add your code here try{ DataInputStream br = new DataInputStream(clientSocket.getInputStream()); DataOutputStream output = new DataOutputStream(clientSocket.getOutputStream());
byte[] nn = new byte[255]; br.read(nn); output.write(nn); output.flush();
byte[] ll = new byte[255]; br.read(ll); output.flush(); String tmpe = new String(ll); int aa = Integer.parseInt(tmpe.trim());
String names = new String(nn); File MyFile = new File("d:\\"); String files = "d:\\"+MyFile.separator+(names.trim()); FileOutputStream out = new FileOutputStream(files); BufferedOutputStream bw = new BufferedOutputStream(out); byte ff[]=new byte[2048]; int c = 0;
2.没有写倒文件里
3.或者没有flush 或者 close。
http://community.csdn.net/Expert/topic/4514/4514295.xml?temp=.22987
public void client(int s) {
byte[] ff;
int size;
Socket clientSocket;
PrintStream ps;
String fileName;try {
// 创建一个发送的Socket
clientSocket = new Socket(QQ.IP, 8765);
ps = new PrintStream(clientSocket.getOutputStream());
size = (int) Myfile[s].length();
fileName = Myfile[s].getName();
BufferedReader br = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
String over = "\n";
byte pp[] = over.getBytes();
byte byname[] = (fileName + over).getBytes();
System.out.println(new String(byname));
//文件名
ps.write(byname);
ps.flush();
String gh = br.readLine();
String tmp;
tmp = String.valueOf(size) + over;
byte bySize[] = tmp.getBytes();
//文件大小
ps.write(bySize);
ps.flush();
String jj = br.readLine();
ReadT2 += "已发送的文件为" + gh.trim() + ";大小为" + jj.trim() + " ";
T[3].setText(ReadT2); //文件内容
FileInputStream in = new FileInputStream(Myfile[s]);
BufferedInputStream bf = new BufferedInputStream(in);
ff = new byte[2048];
int c;
while ((c = bf.read(ff)) != -1) {
ps.write(ff, 0, c);
ps.flush();
}ps.close();
bf.close();
in.close();
clientSocket.close();
T[s].setText("发送完毕,请选择下个文件!");
T[s].setText("");
} catch (Exception e) {
System.out.println(e.toString());
}
}
这是服务端的部分程序:
public synchronized void run() {
// TODO: Add your code here
try{
DataInputStream br = new DataInputStream(clientSocket.getInputStream());
DataOutputStream output = new DataOutputStream(clientSocket.getOutputStream());
byte[] nn = new byte[255];
br.read(nn);
output.write(nn);
output.flush();
byte[] ll = new byte[255];
br.read(ll);
output.flush();
String tmpe = new String(ll);
int aa = Integer.parseInt(tmpe.trim());
String names = new String(nn);
File MyFile = new File("d:\\");
String files = "d:\\"+MyFile.separator+(names.trim());
FileOutputStream out = new FileOutputStream(files);
BufferedOutputStream bw = new BufferedOutputStream(out);
byte ff[]=new byte[2048];
int c = 0;
while((c=br.read(ff))!=-1){
bw.write(ff,0,c);
bw.flush();
}
bw.close();
output.close();
br.close();
clientSocket.close();
}请教大家了,
但是你的server那边的代码在“大小”那 少发了一次吧?
建议你既然是传送2进制流 不如都用stream 别用reader了
String files = "d:\\"+MyFile.separator+(names.trim());
FileOutputStream out = new FileOutputStream(files);你这里的路径对吗?
打印出来看看。ps:路径要试不存在的话你要用mkdirs先创建的,mkdir不行。