用socket,安卓客户端向pc服务器端传文件。
一开始传出的文件有多出来的字节,后来通过局部修改后没有任何问题了。
安卓客户端代码:
package com.example.androidclient2;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import android.os.Bundle;
import android.app.Activity;
/**
* 对传文件客户端的测试
* @author nm 2014-12-10
*/
public class ClientActivity extends Activity {
private Socket socket;
private OutputStream streamOut;
private InputStream streamIn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
socketPhone();
}
private void socketPhone() {
new Thread(){
@Override
public void run() {
super.run();
try {
socket = new Socket("192.168.0.90", 10000);
streamIn = socket.getInputStream();
streamOut = socket.getOutputStream();
interaction();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
private void interaction() {
new Thread() {
@Override
public void run() {
super.run();
try {
while (true) {
String path = "/mnt/sdcard/abc.mp3";
FileInputStream fileIn = new FileInputStream(path);
// 这个循环有限发送
int a = 0,b = 0;
while (a != -1) {
byte[] fileByte = new byte[1024];
a = (fileIn.read(fileByte, 0, 1024));
b += a;
System.out.println("a==================" + a+ " ,b="+b);
if(a > 0){
System.out.println("a---------------------------------" + a);
streamOut.write(fileByte, 0, a);
streamOut.flush();
}
}
fileIn.close();
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
pc服务器端的代码如下:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
private static ServerSocket server;
private static Socket socket;
private static OutputStream streamOut;
private static InputStream streamIn;
public static void main(String[] args) throws IOException {
server = new ServerSocket(10000);
acceptClient();
}
private static void acceptClient() throws IOException {
new Thread(new Runnable() {
public void run() {
while (true) {
try {
socket = server.accept(); //Socket[addr=/192.168.0.90,port=53418,localport=10000]
streamIn = socket.getInputStream();
streamOut = socket.getOutputStream();
invoke();
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
}).start();
}
private static FileOutputStream file;
private static String savePath = "E:/test/nmsong.mp3";
protected static void invoke() {
new Thread(){
@Override
public void run() {
super.run();
try {
int index =0;
file = new FileOutputStream(savePath, false);
while(true){
int size = streamIn.available();
index++;
//下面先放到文件里面试试能不能成功,结果不能成功。
byte[] buffer = new byte[1024];
int buffer1 = streamIn.read(buffer);
System.out.println("index = "+index + " size=" + size + ", buffer1=" + buffer1);
file.write(buffer, 0 ,buffer1);//后面的两个参数是必须的,否则字节不足默认bugger的长度,则补0。
}
} catch (Exception e) {
e.printStackTrace();
return;
}
}
}.start();
}
}
完。