我有一个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");
}
}
}
}
所以,如果有人可以提供帮助或对情况有所了解,我将非常感激,因为在我解决这个问题之前我无法进一步发展。
此致 加里
答案 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地址 来自模拟器---
干杯,