TCP / IP Android设备连接问题

时间:2013-03-08 11:40:52

标签: java android client

我有一个tcp / ip应用程序,其中客户端'A'获取它的坐标并将它们发送到我的电脑上运行的服务器。我正在使用本地ips等。运行正常,但是今天早上我出来了,我的tp-link路由器和局域网出了问题,所以我安装了我的路由器并且所有连接(wi-fi)都备份了并运行。但是,现在当我尝试运行我的应用程序时,它将无法使用我的设备。

如果我通过模拟器运行它(我只有一个用于测试的字符串)它可以工作,我知道这是因为服务器和模拟器都在同一台机器上。我的ip是正确的,它是服务器运行的机器的...我正在尝试自学这项技术并为大学做一个项目,我不断遇到像这样的大问题。我在下面发布了我的客户端和服务器代码,是否有人可能有任何想法?路由器上的所有设置都是相同的,我确定这只是通过局域网连接我不需要转发任何端口?

客户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");
            }
        }
    }
}

所以,如果有人可以提供帮助或对情况有所了解,我将非常感激,因为在我解决这个问题之前我无法进一步发展。

此致 加里

2 个答案:

答案 0 :(得分:0)

这听起来像手机和服务器之间的连接问题。

  • 仔细检查服务器和手机上的IP地址,确保它们在SAME SUBNET(192.168.3.X)上,如果没有,则需要在路由器上设置转发规则。

  • 您还可以通过在服务器上运行基本html服务器来验证连接,并将手机上的浏览器指向服务器。该框右侧的Apache tomcat易于启动,并且已配置为在启动时运行的仪表板应用程序。您也可以在同一网络上的另一台计算机上对此进行测试,以完全排除您的代码和手机。

答案 1 :(得分: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可选的第二,第三和第四DNS服务器(如果有)

10.0.2.15模拟设备自己的网络/以太网接口

127.0.0.1模拟设备自己的环回接口


基本上如果你在本地运行你的服务器,你应该尝试点击10.0.2.2地址 来自模拟器---

干杯,