네트워킹이 고통 스럽습니다. 서비스 이용 AsyncTasks에서 나는 소켓 통신을 시작하려고 :안드로이드 소켓이 랩톱 서버에 연결되지 않지만 로컬 Java 프로그램은
public class TransmitService extends Service {
private Socket echoSocket = null;
private static PrintWriter out = null;
private String HOST = null;
private int PORT = -1;
private static Context context;
public static boolean isConnected = false;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO do something useful
context = getApplicationContext();
HOST = intent.getExtras().getString("HOST");
PORT = intent.getExtras().getInt("PORT");
Toast.makeText(context, "HOST/PORT: "+HOST+"/"+PORT, Toast.LENGTH_LONG).show();
new initNetworkTask().execute();
return Service.START_NOT_STICKY;
}
// Send the orientation data
public static void sendData(float f1, float f2, float f3) {
new sendDataTask().execute(f1, f2, f3);
}
static class sendDataTask extends AsyncTask<Float, Void, Void> {
@Override
protected Void doInBackground(Float... params) {
try {
JSONObject j = new JSONObject();
j.put("yaw", params[0]);
j.put("pitch", params[1]);
j.put("roll", params[2]);
String jString = j.toString();
out.println(jString);
} catch (Exception e) {
Log.e("sendDataTask", e.toString());
}
return null;
}
}
class initNetworkTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
echoSocket = new Socket(HOST, PORT);
out = new PrintWriter(echoSocket.getOutputStream(), true);
out.println("Welcome.");
isConnected = true;
} catch (Exception e) {
Log.e("initNetworkTask", e.toString());
isConnected = false;
}
return null;
}
@Override
protected void onPostExecute(Void result) {
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO for communication return IBinder implementation
return null;
}
}
내 "서버"내 컴퓨터에서 실행 단지 파이썬 스크립트입니다
import socket
HOST = '192.168.###.#' #(numbers omitted from S/O question)
PORT = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if data is not None:
print data
conn.close()
다음 서버가이 자바 클라이언트와 함께 잘 작동 같은 노트북에서 실행 :
public class DataSender {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
//BufferedReader in = null;
try {
echoSocket = new Socket("192.168.###.#", 10000);
out = new PrintWriter(echoSocket.getOutputStream(), true);
//in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for " + "the connection to: taranis.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput); //out.println - THIS IS HOW DATA IS SENT
//System.out.println("echo: " + in.readLine());
}
out.close();
//in.close();
stdIn.close();
echoSocket.close();
}
}
난 정말 내 안드로이드 응용 프로그램에서 작업이 싶어
- 내 목적은 지속적으로,887,573,223를 통해 방향 데이터를 스트리밍하는 것입니다210 내 노트북에.
테스트 측면에서 : 저는 Windows 방화벽을 끈 후 동일한 WiFi 연결 (스타 벅스)에서 테스트를 수행하고 몇 가지 다른 포트 (80, 4444, 4445, 5000)를 시도했습니다.
내 안드로이드 응용 프로그램에서 얻을 주석 오류는 다음과 같습니다 모습을 촬영
java.net.ConnectException: failed to connect to /192.168.###.# (port 10000): connection failed: ETIMEDOUT (Connection timed out)
덕분에 해결이 문제를 얻는 자세한 내용은/실행 더 많은 테스트를 제공하실 수 있습니다. 또한 인터넷을 통해 휴대 전화에서 방향 데이터를 전송하는 다른 솔루션을 고려하는 데 관심이 있습니다.
인터넷 호스팅이 있습니까? 클라우드의 상자에 떨어 뜨려서 시도해 보면 약간의 통찰력을 제공 할 수 있습니다. (아마도 Windows 랩톱을 통해 더 잘 로깅 할 수 있습니다 !!) – corsiKa
사실, 내 애플리케이션은 전화 대 랩톱 무선 통신을 의미합니다. . Android로 할 수있는 대안을 알고 있다면 관심을 가질 수 있습니다. – JDS
그냥 우리가 사적인 IP를 생략했다는 것을 알게되었습니다. D – Fred