2013-03-08 50 views
0

我有一个tcp/ip应用程序,客户端'A'获取它的坐标并将它们发送到我的电脑上运行的服务器。我使用本地IPS等,这是运行良好,但我今天早上出来,然后我和我的tp-link路由器和局域网问题,所以我重新安装我的路由器和所有连接(Wi-Fi)备份并跑步。但是,现在当我尝试运行我的应用程序时,它将无法与我的设备一起使用。TCP/IP Android设备连接问题

如果我在模拟器中运行它(我只是有一个用于测试的字符串)它的作品,我知道,这是因为无论是服务器和仿真器都在同一台机器上。我的IP是正确的,它是服务器运行的机器的...我试图教自己这个技术,并为大学做一个项目,我不断遇到像这样的大量头痛。我已经在下面发布了我的客户端和服务器代码,有没有人可能有任何想法?路由器上的所有设置都是相同的,我确定这只是通过局域网连接,我不必转发任何端口?

客户端

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

所以,请,如果有人可以帮助或扔在有些情况我光会非常感激,因为我不能开发任何进一步,直到我排序这个问题。

问候, 加里

+0

更新您的问题标题有摘要指明你的问题 – 2013-03-08 11:47:44

+0

done..can everyone help me? – 2013-03-08 12:20:04

+0

http://developer.android.com/tools/devices/emulator.html仔细阅读模拟器网络和网络地址空间 – 2013-03-08 22:07:17

回答

0

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

  • 仔细检查服务器和手机上的IP地址,并确保他们在同一个子网(192.168.3.X),如果没有,那么你需要建立一个转发规则路由器。

  • 您还可以通过运行在服务器框中一个基本的HTML服务器验证连接和手机上的浏览器指向服务器。该框的Apache Tomcat很容易启动,并且已经配置了一个仪表板应用程序,可以在启动时运行。您也可以在同一网络上的另一台计算机上测试此功能,以排除您的代码和手机。从那里

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

    的摘录:

0

阅读本

网络地址说明 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地址 ---

干杯,