0

クライアント「A」がその座標を取得し、PCで実行されているサーバーに送信するtcp/ipアプリケーションがあります。ローカルIPなどを使用しています。これは正常に実行されていましたが、今朝出てきましたが、tp-linkルーターとLANに問題があったため、ルーターを再インストールすると、すべての接続(wi-fi)がバックアップされます。と実行しています。ただし、アプリを実行しようとすると、デバイスで機能しなくなります。

エミュレーターを介して実行すると(テスト用の文字列があります)、サーバーとエミュレーターの両方が同じマシン上にあるためです。私のIPは正しいです、それはサーバーが実行されているマシンのIPです...私は自分自身にこのテクノロジーを教えて大学のためのプロジェクトをしようとしています、そして私はこのような大きな頭痛に直面し続けています。クライアントとサーバーのコードを以下に投稿しましたが、何かアイデアがある人はいますか?ルーターの設定はすべて同じです。これはLAN経由で接続しているだけなので、ポートを転送する必要はありませんか?

クライアントA

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class Child extends Activity implements LocationListener {

    private Socket s;
    private PrintWriter p;
    public static double latitude;
    public static double longitude;
    String coordinates;


    @Override
    public void onCreate(Bundle savedInstanceState)

    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.child);

        LocationManager mlocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocationListener = new MyLocationListener();

        mlocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
                mlocationListener);         

        String hello = "hello";  //FOR TESTING PURPOSES

        Transmit (hello);

        Log.d("test", "test");
    }



   public class MyLocationListener implements LocationListener {

        public void onProviderDisabled(String provider) {
            Toast.makeText(getApplicationContext(), "Gps Disabled",
                    Toast.LENGTH_SHORT).show();
        }

        public void onProviderEnabled(String provider) {
           Toast.makeText(getApplicationContext(), "Gps Enabled",
                   Toast.LENGTH_SHORT).show();
       }
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
             latitude = location.getLatitude();
             longitude = location.getLongitude();

             coordinates = ("TESTING " + latitude + longitude);

             //Transmit(coordinates);         
        }   
    }

    private void Transmit(final String message) {

        Thread trans = new Thread(new Runnable() {

            public void run() {

                Log.d("TRANSMIT", "CALLED");

                // TODO Auto-generated method stub
                try {

                    s = new Socket("192.168.3.103", 1111); // connect to
                                                            // server
                    Log.d("CONNECTED", "Connected");

                    DataOutputStream _OutPut = new DataOutputStream(
                            s.getOutputStream());
                    _OutPut.writeBytes(message + "\n");
                    _OutPut.flush();
                    _OutPut.close();

                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        trans.start();
    }

    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub      
    }

    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub      
    }

    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub      
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub      
    }
}

サーバ

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class TCPServer {

    public static void main(String[] args) throws Exception {

        Socket s;       
        ServerSocket ss = new ServerSocket(1111);

        System.out.println("Server started. Listening to the port 2001");
        System.out.println("Server: waiting for connection ..");

        while (true) {
            try {
                s = ss.accept();        

                if (s != null) {

                    InputStream fromChild = s.getInputStream();

                    while (s.isConnected()) {

                        System.out.println("Child Connected");              

                        Scanner r = new Scanner(fromChild);
                        String location;
                        location = r.nextLine();
                        System.out.println(location);

                    }
                }

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

ですから、誰かが状況を助けたり、光を当てたりすることができれば、私はこの問題を解決するまでこれ以上発展することができないので、私は非常に感謝しています。

よろしく、ゲイリー

4

2 に答える 2

0

これを読む:

http://developer.android.com/tools/devices/emulator.html#emulatornetworking

そこからの抜粋:

ネットワーク アドレス 説明 10.0.2.1 ルーター/ゲートウェイ アドレス

10.0.2.2 ホスト ループバック インターフェイスへの特別なエイリアス (つまり、開発マシンでは 127.0.0.1)

10.0.2.3 最初の DNS サーバー

10.0.2.4 / 10.0.2.5 / 10.0.2.6 オプションの 2 番目、3 番目、4 番目の DNS サーバー (存在する場合)

10.0.2.15 エミュレートされたデバイス自身のネットワーク/イーサネット インターフェイス

127.0.0.1 エミュレートされたデバイス自身のループバック インターフェイス


基本的に、サーバーをローカルで実行している場合は、エミュレーターから 10.0.2.2 アドレスを試してみてください ---

乾杯、

于 2013-03-08T22:11:22.600 に答える
0

電話とサーバー間の接続の問題のようです。

  • サーバーと電話の IP アドレスを再確認し、それらが同じ SUBNET (192.168.3.X) 上にあることを確認します。そうでない場合は、ルーターに転送ルールを設定する必要があります。

  • また、サーバー ボックスで基本的な html サーバーを実行し、電話機のブラウザをサーバーに向けることによって、接続を確認することもできます。すぐに使用できる Apache tomcat は簡単に起動でき、起動時に実行するようにダッシュボード アプリが既に構成されています。同じネットワーク上の別のコンピューターからこれをテストして、コードと電話を完全に除外することもできます.

于 2013-03-08T22:01:49.807 に答える