这有点长,所以我将从问题开始:如何让 ip 连接 Android 手机上的套接字(不在专用网络上)?
以及如何检查电话 ISP 是否阻止了端口?
更多信息:
我有一个程序可以在地图上显示用户位置,您可以单击它们并开始聊天。我已经测试了套接字连接,它在 2 个模拟器上运行良好,但是当我在手机上尝试时,它无法连接套接字。
超时异常:
NotificationChat.ChatSocket = new Socket(serverAddr, 5000);
我最好的猜测是服务器(又名电话 1)的 IP 不正确,或者端口可能被阻止或正在使用中。
我尝试了两种获取电话IP的方法:
public static String getLocalIpAddress() {
try {
Socket socket = new Socket("www.google.com", 80);
Log.i("iptest", socket.getLocalAddress().toString().substring(1));
String ip=socket.getLocalAddress().toString().substring(1);
socket.close();
return ip;
} catch (Exception e) {
Log.i("", e.getMessage());
return "exception in get ip";
}
/*
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("b2264", ex.toString());
}
return null; */
}
我得到的IP是:10.227.130.191,如果我没记错的话是A类本地IP。
服务器端:
while(flag==1)
{
if(ss==null)
{
try {
ss = new ServerSocket(SERVERPORT);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
Log.d("thread","chatnotifiction befor ss accpect");
Socket NotAvilabale=null;
NotAvilabale = ss.accept();
if(ChatSocket!=null)
{
Log.d("test55","not avilable");
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(NotAvilabale.getOutputStream())),true);
out.println("notav");
NotAvilabale.close();
continue;
}
ChatSocket=NotAvilabale;
Log.d("thread","chatnotifiction after ss accpect");
CharSequence contentText = "someone wants to talk to you";
PendingIntent contentIntent = PendingIntent.getActivity(this, 1, notificationIntent, 2);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
mNotificationManager.notify(NOTIFI_ID, notification);
} catch (IOException e) {
Log.d("chat notifi io exception","chat notifi io exception ");
e.printStackTrace();
}catch (Exception e) {
Log.d("chat notifi Exception 2","chat notifi Exception 2 ");
// TODO: handle exception
}
}
我对套接字没有太多经验。这是我第一次使用它们。我希望你们中的一个人有更多的经验,可以帮助我。
在此先感谢(对不起,绉纱英语)。