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:
- Server und emulator-Programm auf dem gleichen pc.
- Server in einem pc mit Echtzeit-IP-Adresse-emulator ist in einem anderen pc mit einem echten ip-Adresse.
- Server und emulator-sowohl innerhalb des privaten Netzwerks in einem pc oder anderen pc oder Gerät.
funktioniert nicht, wenn:
- client ist ein smart Handy mit wifi-oder 3g-Netz, und der server eine echte IP-Adresse auf verschiedenen Netzwerk.
- 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 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gerade die Portnummer 4444 auf 6667 und Es funktionierte auf jetzt überall. Ich glaube nicht, dass der port 4444 verwendet wurde, irgendwo sonst, weil das Programm funktioniert auf dem lokalen Netzwerk
Für
TCP connections
arbeiten auf einem echten Gerät, müssen Sie dieURL
einer öffentlich gehosteten domain. Einlocalhost
oder einem lokalen Netzwerk-URL funktioniert nur mitan emulator
aufa PC
auf dem gleichen lokalen Netzwerk.Referenzen:
1. Emulator-Networking.
2. Wie, um eine Verbindung zu meinem http://localhost web-server aus Android-Emulator in der Eclipse
3. Zugriff auf localhost:port von Android-emulator
4. "Aufruf web-service aus dem android-Gerät
5. Anschließen eines Android-Geräts An einen Web-Dienst auf dem Lokalen Host
6. Wie kann ich auf meinem localhost von meinem Android-Gerät?
7. How to browse "localhost" auf android-Gerät?