报错如下
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at com.gaoyunfeng.uplooking.www.server.AndroidServer.main
package com.download;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;public class DownloadFileActivity extends Activity {
public ProgressBar pb;
Button btn;
int progress = 0;
MyAnysTask myAnysTask;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb = (ProgressBar) findViewById(R.id.progressBar1);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
myAnysTask = new MyAnysTask();
myAnysTask.execute("a1.mp3");
btn.setEnabled(false);
}
});
}
@Override
protected void onDestroy() {
finish();
// TODO Auto-generated method stub
super.onDestroy();
} class MyAnysTask extends AsyncTask<String, Integer, String> {
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
progress += values[0];
pb.setProgress(progress);
super.onProgressUpdate(values);
} @Override
protected String doInBackground(String... params) {
Socket socket = null;
InputStream inputStream = null ;
OutputStream outputStream = null ;
OutputStream fileout = null;
try {
socket = new Socket("192.168.1.100", 9999);
byte[] buffer = new byte[8 * 1024];
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();
outputStream.write(params[0].getBytes());
// 设置pb的max
inputStream.read(buffer);
System.out.println("buffer"+new String(buffer).trim());
if (new String(buffer).trim() != null) {
int filecinmax = Integer.parseInt(new String(buffer).trim());
pb.setMax(filecinmax);
}
outputStream.write("hello".getBytes());
// 开始下载文件
File file = new File("/sdcard/a1.mp3");
if (file.exists()) {
file.delete();
}
file.createNewFile(); int count = 0;
fileout = new FileOutputStream(file);
do {
count = inputStream.read(buffer);
fileout.write(buffer, 0, count);
publishProgress(8);
} while (count == buffer.length);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fileout.close();
inputStream.close();
outputStream.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} return null;
} }
}下面是server端package Server;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Serv { public static void main(String[] args) {
ServerSocket ss = null;
InputStream in = null ;
Socket client = null;
InputStream filein = null ;
OutputStream outputStream = null;
try {
byte[] buffer = new byte[1024 * 8];
ss = new ServerSocket(9999);
client = ss.accept();
// 首先读取要下载的文件名
in = client.getInputStream();
outputStream = client.getOutputStream();
in.read(buffer);
String filename = "D:\\music\\" + new String(buffer).trim();
File file = new File(filename); if (file.exists()) {
// 读取文件大小传递给客户端
int count = 0;
count = (int) (file.length() / 1024);
outputStream.write(("" + count).getBytes()); // 开始向客户端发送文件 前确定连接
buffer = new byte[8 * 1024];
in.read(buffer);
if (new String(buffer).trim().equals("hello")) {
filein = new FileInputStream(file);
do {
count = filein.read(buffer);
System.out.println(count + "");
outputStream.write(buffer, 0, count);
} while (count == buffer.length);
System.out.println("发送完成");
filein.close(); }
}
in.close();
outputStream.close();
client.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
outputStream.close();
client.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at com.gaoyunfeng.uplooking.www.server.AndroidServer.main
package com.download;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;public class DownloadFileActivity extends Activity {
public ProgressBar pb;
Button btn;
int progress = 0;
MyAnysTask myAnysTask;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb = (ProgressBar) findViewById(R.id.progressBar1);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
myAnysTask = new MyAnysTask();
myAnysTask.execute("a1.mp3");
btn.setEnabled(false);
}
});
}
@Override
protected void onDestroy() {
finish();
// TODO Auto-generated method stub
super.onDestroy();
} class MyAnysTask extends AsyncTask<String, Integer, String> {
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
progress += values[0];
pb.setProgress(progress);
super.onProgressUpdate(values);
} @Override
protected String doInBackground(String... params) {
Socket socket = null;
InputStream inputStream = null ;
OutputStream outputStream = null ;
OutputStream fileout = null;
try {
socket = new Socket("192.168.1.100", 9999);
byte[] buffer = new byte[8 * 1024];
inputStream = socket.getInputStream();
outputStream = socket.getOutputStream();
outputStream.write(params[0].getBytes());
// 设置pb的max
inputStream.read(buffer);
System.out.println("buffer"+new String(buffer).trim());
if (new String(buffer).trim() != null) {
int filecinmax = Integer.parseInt(new String(buffer).trim());
pb.setMax(filecinmax);
}
outputStream.write("hello".getBytes());
// 开始下载文件
File file = new File("/sdcard/a1.mp3");
if (file.exists()) {
file.delete();
}
file.createNewFile(); int count = 0;
fileout = new FileOutputStream(file);
do {
count = inputStream.read(buffer);
fileout.write(buffer, 0, count);
publishProgress(8);
} while (count == buffer.length);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fileout.close();
inputStream.close();
outputStream.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} return null;
} }
}下面是server端package Server;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Serv { public static void main(String[] args) {
ServerSocket ss = null;
InputStream in = null ;
Socket client = null;
InputStream filein = null ;
OutputStream outputStream = null;
try {
byte[] buffer = new byte[1024 * 8];
ss = new ServerSocket(9999);
client = ss.accept();
// 首先读取要下载的文件名
in = client.getInputStream();
outputStream = client.getOutputStream();
in.read(buffer);
String filename = "D:\\music\\" + new String(buffer).trim();
File file = new File(filename); if (file.exists()) {
// 读取文件大小传递给客户端
int count = 0;
count = (int) (file.length() / 1024);
outputStream.write(("" + count).getBytes()); // 开始向客户端发送文件 前确定连接
buffer = new byte[8 * 1024];
in.read(buffer);
if (new String(buffer).trim().equals("hello")) {
filein = new FileInputStream(file);
do {
count = filein.read(buffer);
System.out.println(count + "");
outputStream.write(buffer, 0, count);
} while (count == buffer.length);
System.out.println("发送完成");
filein.close(); }
}
in.close();
outputStream.close();
client.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
outputStream.close();
client.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}
count = inputStream.read(buffer);
fileout.write(buffer, 0, count);
publishProgress(8);
} while (count == buffer.length); 这个会一直向文件中写数据啊
输入流也一样,客户端服务端都一样,一般没有直接用SocketOutputStream来读写数据的吧,至少我没用过