2013-07-22 2 views
-1

네트워킹이 고통 스럽습니다. 서비스 이용 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)

덕분에 해결이 문제를 얻는 자세한 내용은/실행 더 많은 테스트를 제공하실 수 있습니다. 또한 인터넷을 통해 휴대 전화에서 방향 데이터를 전송하는 다른 솔루션을 고려하는 데 관심이 있습니다.

+1

인터넷 호스팅이 있습니까? 클라우드의 상자에 떨어 뜨려서 시도해 보면 약간의 통찰력을 제공 할 수 있습니다. (아마도 Windows 랩톱을 통해 더 잘 로깅 할 수 있습니다 !!) – corsiKa

+0

사실, 내 애플리케이션은 전화 대 랩톱 무선 통신을 의미합니다. . Android로 할 수있는 대안을 알고 있다면 관심을 가질 수 있습니다. – JDS

+1

그냥 우리가 사적인 IP를 생략했다는 것을 알게되었습니다. D – Fred

답변

0

오, 이런, 어리 석고 창피합니다. 기본적으로 잘못된 IP 주소 (192.168 ....)를 사용하고있었습니다.

Windows에서는 ipconfig (Linux : ifconfig)를 사용하고 무선 LAN (wlan)에 해당하는 IP 주소를 선택하십시오. 가상 머신이나 다른 쓰레기에 해당하는 다른 IP 주소를 사용하고있었습니다.

앞으로 도움이되기를 바랍니다. 이런 종류의 싫어합니다.

관련 문제