2012-05-02 13 views
10

W jaki sposób mogę przesłać dane między dwoma urządzeniami? Chciałbym przesłać dane (głównie pliki graficzne) między różnymi platformami (Android, iPhone). Czy można używać p2p czy powinienem używać klienta-serwera?Jak przesłać "dane" między dwoma urządzeniami (Android, iPhone)?

Każda pomoc zostanie doceniona.

+0

Android2android jest dostępny dla wersji demo BTchat .But BT w Iphone nie jest przeznaczony do tego użytku. –

+0

Jaki mechanizm chcesz przenieść? BlueTooth, wifi, internet - dowolne z powyższych? – halfer

+0

Chcę przesyłać dane przez internet za pomocą 3G lub Wi-Fi. –

Odpowiedz

5

Podczas P2P jest możliwe w niektórych przypadkach można osiągnąć najbardziej powszechną zgodność z architekturą klient-serwer, kosztem konieczności wdrożyć, moc , łącz i utrzymuj serwery.

  • Będziesz mógł korzystać z obu punktów dostępowych WiFi i Mobile (3G, etc) sieci
  • Masz gotową miejsce w systemie pomiaru (lub ograniczenia) Wykorzystanie i/lub wstawić reklamy
  • Nie musisz się martwić firewallami blokującymi połączenia przychodzące do urządzeń (często w sieciach Wi-Fi, prawie zawsze w przypadku urządzeń mobilnych).
  • Względne położenie urządzeń nie ma znaczenia
  • Można współpracować nie tylko ze smartfonami i tabletami, ale z tradycyjnymi komputerami i laptopami
+0

Co z wydajnością p2p i klienta-serwera? Który z nich ma lepszą wydajność? –

+1

Wydajność wynosi zero, jeśli jeden z pomysłów nie zadziała w sytuacjach, w których jest potrzebny. Tam, gdzie oba pomysły będą działać, możesz wesprzeć oba. –

13

Czy obejrzałeś Qualcomm's AllJoyn library? Działa tylko przez Bluetooth lub Wi-Fi.

Poniższy kod jest kopiowany z tego Incorporating Socket Programming into your Applications

public class ServerActivity extends Activity { 

    private TextView serverStatus; 

    // default ip 
    public static String SERVERIP = "10.0.2.15"; 

    // designate a port 
    public static final int SERVERPORT = 8080; 

    private Handler handler = new Handler(); 

    private ServerSocket serverSocket; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.server); 
     serverStatus = (TextView) findViewById(R.id.server_status); 

     SERVERIP = getLocalIpAddress(); 

     Thread fst = new Thread(new ServerThread()); 
     fst.start(); 
    } 

    public class ServerThread implements Runnable { 

     public void run() { 
      try { 
       if (SERVERIP != null) { 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          serverStatus.setText("Listening on IP: " + SERVERIP); 
         } 
        }); 
        serverSocket = new ServerSocket(SERVERPORT); 
        while (true) { 
         // listen for incoming clients 
         Socket client = serverSocket.accept(); 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           serverStatus.setText("Connected."); 
          } 
         }); 

         try { 
          BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
          String line = null; 
          while ((line = in.readLine()) != null) { 
           Log.d("ServerActivity", line); 
           handler.post(new Runnable() { 
            @Override 
            public void run() { 
             // do whatever you want to the front end 
             // this is where you can be creative 
            } 
           }); 
          } 
          break; 
         } catch (Exception e) { 
          handler.post(new Runnable() { 
           @Override 
           public void run() { 
            serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones."); 
           } 
          }); 
          e.printStackTrace(); 
         } 
        } 
       } else { 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          serverStatus.setText("Couldn't detect internet connection."); 
         } 
        }); 
       } 
      } catch (Exception e) { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         serverStatus.setText("Error"); 
        } 
       }); 
       e.printStackTrace(); 
      } 
     } 
    } 

    // gets the ip address of your phone's network 
    private String getLocalIpAddress() { 
     try { 
      for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
       NetworkInterface intf = en.nextElement(); 
       for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
        InetAddress inetAddress = enumIpAddr.nextElement(); 
        if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } 
       } 
      } 
     } catch (SocketException ex) { 
      Log.e("ServerActivity", ex.toString()); 
     } 
     return null; 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     try { 
      // make sure you close the socket upon exiting 
      serverSocket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 
6

Jeśli wszystko jest w porządku z Bump, to dostarczają API dla programistów, z których mogą korzystać i jest to bardzo proste w użyciu. Check this out.

Aby zobaczyć wersję demo transmisji między systemem iOS i Androidem @youtube.

Szczegółowy fragment kodu i przykład w Github.

PS: nie należy do bu.mp :).

+0

Dziękuję za odpowiedź. Wiem, że Bump, ale nie chcę go używać. Próbuję dowiedzieć się, jak to działa. –

+0

Idea wyższego poziomu: http://bu.mp/faq – Futur

2

Chciałbym użyć WebService. Ułatwia to utrzymanie Twojej usługi, ponieważ wdrożenie usługi jest niezależne od twojej aplikacji.

Pro Webservice:

  • Osiągalny pod wstępnie skonfigurowanego DNS
  • Modyfikacje w Serwisie nie wpływa na stosowanie (nie wymagające temat ewentualnych poprawek aktualizacji)

Contra Zestawienie:

  • Cały ruch przechodzi przez serwer
  • Aplikacja zależy od Twojego serwera

Powinieneś zadać sobie pytanie, ile danych jest przekazywanych w twojej komunikacji? Czy istnieje realna korzyść z używania bezpośrednich połączeń?

0

Możesz używać filehub do przesyłania plików pomiędzy IOS i Android.

Nowe urządzenie o nazwie fielhub na rynku może przesyłać zdjęcia/filmy/muzykę pomiędzy urządzeniami iOS i Android, lub między urządzeniami mobilnymi a kartami SD/USB HDD. Myślę, że nazywa się to rhpower filehub.

Powiązane problemy