Wie eine Verbindung zu einem Java-TCP-server-socket, die die Öffentliche IP-Adresse Vom Android-Tcp-Client-Socket?

Habe ich zwei Echte Ip-Adresse 220.xx.xxx.xxx in meiner Arbeit Stelle. Ich habe versucht, eine einfache java tcp-server-Programm und android-tcp-client-Programm. Der android-client funktioniert gut, wenn:

  1. Server und emulator-Programm auf dem gleichen pc.
  2. Server in einem pc mit Echtzeit-IP-Adresse-emulator ist in einem anderen pc mit einem echten ip-Adresse.
  3. Server und emulator-sowohl innerhalb des privaten Netzwerks in einem pc oder anderen pc oder Gerät.

funktioniert nicht, wenn:

  1. client ist ein smart Handy mit wifi-oder 3g-Netz, und der server eine echte IP-Adresse auf verschiedenen Netzwerk.
  2. client ist ein emulator läuft über WLAN verbundenen Gerät, server eine echte ip-Adresse.

So, wie eine Verbindung zu einem Java-TCP-server-socket, die die Öffentliche IP-Adresse Vom Android-Tcp-Client-Socket? Ich glaube nicht, dass das einfügen von code ist wirklich notwendig. Aber wenn jemand fragt kann ich Ihnen bieten.
Nach meiner Suche im internet einige Leute geben Anregung zum konfigurieren des Routers auf der server-Seite. dies scheint mir wenig ärgerlich. wenn ich einen websever auf Sie zugegriffen werden kann von überall aus an jedem Ort.
code hier:
Server-Seite:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.*;

public class Server {

    private static ServerSocket serverSocket;
    private static Socket clientSocket;
    private static InputStreamReader inputStreamReader;
    private static BufferedReader bufferedReader;
    private static OutputStreamWriter outputStreamWriter;
    private static BufferedWriter bufferedWriter;
    private static PrintWriter printWriter;
    private static String message;
    public static void main(String[] args) {
        //TODO Auto-generated method stub
        try {
            System.out.println(InetAddress.getLocalHost());
            serverSocket = new ServerSocket(4444); //Server socket

        } catch (IOException e) {
            System.out.println("Could not listen on port: 4444");
        }

        System.out.println("Server started. Listening to the port 4444");

        while (true) {
            try {

                clientSocket = serverSocket.accept(); //accept the client connection
                System.out.println("connection initiated");

                DataInputStream din = new DataInputStream(clientSocket.getInputStream());

                DataOutputStream dout= new DataOutputStream(clientSocket.getOutputStream());

                String msg = din.readUTF();
                System.out.println(msg);

                dout.writeUTF("hello from server");
                System.out.println("sent to client");



                clientSocket.close();

            } catch (IOException ex) {
                System.out.println("Problem in message reading "+ex);
            }
        }
    }

}

Client-Seite:

package com.example.client;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

 TextView textResponse;
 EditText editTextAddress, editTextPort; 
 Button buttonConnect, buttonClear;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  editTextAddress = (EditText)findViewById(R.id.address);
  editTextPort = (EditText)findViewById(R.id.port);
  buttonConnect = (Button)findViewById(R.id.connect);
  buttonClear = (Button)findViewById(R.id.clear);
  textResponse = (TextView)findViewById(R.id.response);

  buttonConnect.setOnClickListener(buttonConnectOnClickListener);

  buttonClear.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {
    textResponse.setText("");
   }});
 }

 OnClickListener buttonConnectOnClickListener = 
   new OnClickListener(){

    @Override
    public void onClick(View arg0) {
     MyClientTask myClientTask = new MyClientTask(
       editTextAddress.getText().toString(),
       Integer.parseInt(editTextPort.getText().toString()));
     myClientTask.execute();
    }};

 public class MyClientTask extends AsyncTask<Void, Void, Void> {

  String dstAddress;
  int dstPort;
  String response = "";

  MyClientTask(String addr, int port){
   dstAddress = addr;
   dstPort = port;
  }
  private PrintWriter printwriter;
  private InputStreamReader inputStreamReader;
  private BufferedReader bufferedReader;
  @Override
  protected Void doInBackground(Void... arg0) {

   Socket socket = null;

   try {
    socket = new Socket(dstAddress, dstPort);

    DataInputStream din = new DataInputStream(socket.getInputStream());
    DataOutputStream dout = new DataOutputStream(socket.getOutputStream());

    dout.writeUTF("hello from client");

    response="sent to serve;r";

    String msg = din.readUTF();
    response+=msg;

    socket.close();

   } catch (Exception e) {
    //TODO Auto-generated catch block
    e.printStackTrace();
    response = e.toString();
   }
   return null;
  }

  @Override
  protected void onPostExecute(Void result) {
   textResponse.setText(response);
   super.onPostExecute(result);
  }

 }

}
  • Was verstehen Sie unter einer "real-ip"? Sie mischen die internet-ip von deinem router mit der lokalen ip dein Rechner bekommt vom router?
  • Es ist schade, dass Sie nicht die Frage in deinem post. Ein Android-client kann eine Verbindung mit einem server auf dem internet, wenn der client die internet-Verbindung zu und nutzt die internet-ip des Servers. Das ist alles. In Ihrem 'funktioniert nicht, 1', die Sie erwähnen, wifi und 3G gleichzeitig. Das ist nicht möglich. Bedrohlich, Sie anders als Sie sind anders.
  • "Was verstehen Sie unter einer "richtigen ip'?" --- Antwort: die öffentliche ip-Adresse: die von überall zugänglich im internet, wenn ein webserver darauf läuft. "Sie sind-Sie mischen die internet-ip von deinem router mit der lokalen ip dein Rechner bekommt vom router? "--- Antwort: Nein, ich m nicht. Ich erwähnte auch die ip-Adresse beginnend mit 3 Ziffern. Ihre nicht-lokale oder private ip-Adresse. Ich m ziemlich sicher, dass ich mich nicht gemischt, es
  • "Es ist schade, dass Sie nicht die Frage in Ihrem post." -- Jetzt Bearbeitet. Nicht arbeiten " ziemlich viel erklären, das problem. Glaube nicht, dass einige Menschen haben vielleicht problem zu verstehen. "
  • "Ein Android-client kann eine Verbindung mit einem server auf dem internet, wenn der client die internet-Verbindung zu und nutzt die internet-ip des Servers."-- was bedeutet es? nutzt die internet-ip des Servers? Ich machte ziemlich klar, dass android-client und server auf verschiedenen Netzwerk, wenn Es nicht funktioniert. Lies die Frage nochmal, wenn u nicht verstehen. wenn der server eine echte Ip-Adresse und android-client ist in der wifi-oder 3g-Netz, wie kommen Sie mit dem gleichen internet?
  • "In Ihrer 'funktioniert nicht, 1', die Sie erwähnen, wifi und 3G gleichzeitig. Das ist nicht möglich. Bedrohlich, Sie anders als Sie sind anders" - Bitte Lesen Sie die Frage zweimal, wenn u dont verstehen und geben Sie ihm eine minute, bevor Sie beliebige Kommentare. "der Kunde ist ein smart Handy mit wifi-oder 3g-Netz," did u See the "ODER" in der Aussage? wie hast u finden, dass ich sagte, wifi und 3g auf dem gleichen Gerät gleichzeitig?
  • Wenn Sie Fragen, eine coding Frage müssen Sie nach dem code. Wenn du bist nicht, du bist off-topic hier.
  • Den code Hinzugefügt.
  • haben Sie gesehen, meine Antwort ?
  • Ja! ich danke Ihnen sehr ! Kann u bitte stellen Sie mir einen Verweis?
  • ich werde schauen für ein paar nette Verweise, und fügen Sie Sie. mittlerweile, können Sie markieren Sie bitte meine Antwort als richtig und upvote es ? Vielen Dank 🙂
  • Ich war tatsächlich wartet Referenzen. Ich habe versucht, zu suchen und wartete, um zu sehen, wenn jemand anderes gibt seine Meinung ab. Ich von Ihnen positiv bewertet werden Ihre Antwort in dem moment sah ich es. Ich mochte die Antwort :). Doch eine person gab, die Sie unten Stimmen und auch kommentiert es. aber der Kommentar ist nun entfernt. aber seine downvote ist immer noch da. Jetzt werde ich markiere die Antwort als akzeptiert.
  • sorry für die späte Antwort. ich habe die Referenzen, sehen Sie bitte bearbeitet beantworten 🙂

InformationsquelleAutor biborno | 2015-03-22
Schreibe einen Kommentar