从此代码我可以传输文件与我的电脑在Android 2.3.3。(戴尔Streak),但当我运行相同的代码在Android 4.2(三星GS 3)没有。我认为问题是Socket何时初始化?我必须做的是在4.2中工作吗?Android套接字运行在姜饼,但不是在果冻豆
package com.hrandika.synchronizer.serverClient;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.os.AsyncTask;
import android.util.Log;
public class Client {
File sendingFile;
public Client(File sendingFile) {
Log.d("Client", "Cleint : Constructed");
this.sendingFile = sendingFile;
}
public void send(String ip) {
try {
Log.d("Client", "Cleint stating ....");
Socket socket = new Socket(ip, 5555);
Log.d("Client", "Cleint Socket Okay");
OutputStream outputStream = socket.getOutputStream();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
outputStream);
Log.d("Client", "Cleint ready to sent");
outputStreamWriter.write(sendingFile.getName() + "\n");
outputStreamWriter.flush();
Log.d("Client", "Cleint Sent");
InputStream inputStream = socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String serverResponse = bufferedReader.readLine();
if (serverResponse.equals("READY")) {
Log.d("Client", "Cleint : server ready");
byte[] buffer = new byte[(int) sendingFile.length()];
FileInputStream fileInputStream = new FileInputStream(
sendingFile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(
fileInputStream);
bufferedInputStream.read(buffer, 0, buffer.length);
outputStream.write(buffer, 0, buffer.length);
outputStream.flush();
bufferedInputStream.close();
fileInputStream.close();
socket.close();
}
} catch (Exception e) {
}
}
public class Sender extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... params) {
send("192.168.43.21");
return null;
}
}
} // End class Client
use e.printStackTrace();在catch下看看这段代码是否给出了错误? –
你如何实例化并启动'Sender'?盲猜:你自己调用'doInBackground()'(这是'AsyncTask'误用),从而导致'NetworkOnMainThreadException'? –
它显示此11-28 17:17:52.890:W/System.err(20565):android.os.NetworkOnMainThreadException – learnwhat