Articles of 网络

如何在Android中将设备连接到WiFi时获取蜂窝网络的IP地址

有没有办法我可以同时获得Android中的WiFi和蜂窝网络的IP地址。我尝试使用很多例子,但能够获得只有WiFi网络的地址,而不是蜂窝网络。我已启用WiFi和蜂窝网络和设备通过WiFi上网。 这是我用来获取IP地址的代码: String ipAddress = null; try { for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { ipAddress = inetAddress.getHostAddress().toString(); Log.i(“Here is the Address”,ipAddress); } } } } catch (SocketException ex) { } 当设备连接到WiFi时,是否有可能获得蜂窝网络的IP地址。如果可行则是如此。

确定设备公共IP

有谁知道如何获得Android设备的公共IP地址? 我正在尝试运行服务器套接字(只是试验简单的p2p)。 这需要通知每个公共IP的本地和远程用户。 我find了这个post如何从代码中获取设备的IP地址? 其中包含指向如何获取IP的文章( http://www.droidnova.com/get-the-ip-address-of-your-device,304.html )的链接。 然而,这通过路由器连接时返回本地IP,我想获得实际的公共IP。 TIA

Android究竟如何确定它是否在线?

Android究竟如何确定以下状态之间的差异? 网络接口有效(例如Wifi或3G),但无法访问互联网。 具有活动的网络接口,并且需要要求用户在网页上登录网络。 具有活动的网络接口并且能够访问互联网。 它是否可以向固定的URL(可能在google.com上)发送简单的HTTP请求,并检查返回的文档是否符合预期? 如果是,我们是否知道使用的URL?

真的更喜欢网络:一旦可用就选择我自己的网络提供商(来自代码)

我住在边境附近,在另一个国家工作。 所以我选择了自己的网络提供商作为最爱。 但是,我注意到它尽可能坚持供应商。 因此,当我从我的国家开始时,即使我越过边境,我也会保留我的网络,但是,当我走另一条路时,即使我最喜欢的网络已经可用,它也会保留外国网络。 我知道这一点,因为当我想手动选择它时,它可以从列表中获得。 现在,我想创建一个应用程序,每当它连接到另一个单元塔时,它将在漫游时自动搜索我的首选网络。 现在我明白了,以前我可以用广播接收器改变Cell Location,但现在这是不可能的。 (遗憾的是)我从中读到:以编程方式连接到另一个网络运营商出于安全原因,我似乎无法从应用程序中选择其他提供程序。 (至少有记录的api调用)。 但是,我不关心公共API,因为我不打算在Android Market中分发这个。 它只是一个让我的生活更轻松的应用程序,可能会打开源代码,所以其他人可以根据需要使用它。 我可以使用一些提示来实现这个目的。 所以也许还有其他我可以收听的广播内容,比如信号强度等等,这会启动我的代码来检查我是否可以切换网络。 我更喜欢这个作为广播接收器工作,我也读过,当从服务中使用Cell位置时,我不会在屏幕关闭时获得更新,这在这种情况下会失败。 然后,我将非常感谢有关如何在Android源中搜索可以用来自动选择网络的内容的一些提示/指示。

java.net.ConnectException:无法连接到/192.168.253.3(端口2468):连接失败:ECONNREFUSED(连接被拒绝)

我想在PC和带wifi的手机之间传输一些数据,但我得到“java.net.ConnectException:无法连接到/192.168.253.3(端口2468):连接失败:ECONNREFUSED(连接被拒绝)”当我运行我的android项目。 这是我获取wifi ip地址的方式: String ip = String.format( “%d.%d.%d.%d”, (wifiInfo.getIpAddress() & 0xff), (wifiInfo.getIpAddress() >> 8 & 0xff), (wifiInfo.getIpAddress() >> 16 & 0xff), (wifiInfo.getIpAddress() >> 24 & 0xff)); new Recive().execute(ip); 这是关于向PC发送消息的代码: Socket socket = null; String message = “test\r\n”; protected Void doInBackground(String… urls) { try { Log.i(“ip”, urls[0]); socket = new Socket(urls[0], 2468); toserver = new DataOutputStream(socket.getOutputStream()); […]

如何使用Espresso Idling Resource进行网络呼叫

我试图用Espresso来测试我的用户界面。 当我登录我的应用程序时,我打电话给Parse API(网络电话)来validation用户名和密码。 如果一切顺利,用户将被定向到新活动。 我想测试这个,但我似乎无法使用空闲资源的东西。 码: public class ApplicationTest extends ActivityInstrumentationTestCase2 { private CountingIdlingResource fooServerIdlingResource; public ApplicationTest() { super(LoginActivity.class); } @Before public void setUp() throws Exception { super.setUp(); injectInstrumentation(InstrumentationRegistry.getInstrumentation()); getActivity(); CountingIdlingResource countingResource = new CountingIdlingResource(“FooServerCalls”); this.fooServerIdlingResource = countingResource; Espresso.registerIdlingResources(countingResource); } public void testChangeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.username)) .perform(typeText(“s@s.nl”), closeSoftKeyboard()); […]

XBox 360 TCP堆栈不响应具有0字节有效负载的TCP零窗口探测器

我正在尝试使用通过UPnP将音乐流式传输到XBox的Android应用程序。 流媒体大部分工作,但经常在一两分钟后,流媒体停滞,特别是当网络上有其他活动时。 当流式传输到其他非XBox设备时,这种情况从未发生过。 我已经使用许多不同的UPnP服务器应用程序确认了这种行为。 在分析了大量Wireshark痕迹之后,我find了根本原因。 似乎在TCP接收器窗口填充XBox之后,它只显式地重新宣布窗口更新以响应包含1字节有效载荷数据的零窗口探测器。 虽然基于Windows的计算机发送包含1字节有效负载的Zero Window探测器,但基于Linux的计算机会发送包含0字节有效负载(纯ACK)的探测器。 在理想的网络条件下,这不是问题,因为一旦接收器在其窗口中释放足够的空间以避免愚蠢的窗口综合症,它将始终发送单个窗口更新ACK消息。 但是,如果错过了单个Window Update数据包,它将永远不会再响应基于Linux的Android设备,因为这些设备上的TCP堆栈使用0字节有效负载的零窗口探测器(它们看起来像Keep Alive数据包到Wirehsark )。 XBox和WMP之间的TCP停顿如下所示: 4966 92.330358 10.0.2.214 10.0.2.133 TCP [TCP ZeroWindow] 27883 > 10243 [ACK] Seq=183 Ack=1723007 Win=0 Len=0 4971 92.648068 10.0.2.133 10.0.2.214 TCP [TCP ZeroWindowProbe] 10243 > 27883 [ACK] Seq=1723007 Ack=183 Win=64240 Len=1 4972 92.649009 10.0.2.214 10.0.2.133 TCP [TCP ZeroWindowProbeAck] [TCP ZeroWindow] 27883 > […]

检测Android上的wifi IP地址?

我需要确定Android设备是否连接到Wifi,如果是,请获取其Wifi IP地址。 我知道如何使用ConnectivityManager来确定活动网络是否是Wifi网络,我知道如何使用java.net.NetworkInterface迭代可用的网络接口并获取其IP地址。 我不知道该怎么做是确定哪个IP地址属于Wifi网络,如果find多个地址。 任何建议? 谢谢。

在Android中捕获网络数据包?

我正在开发一个项目,我需要捕获传入/传出的数据包并将它们存储在pcap文件中。 Android为此目的提供了VpnService ,这是在API级别14中添加的。尽管在SO上似乎有很多关于此的问题,但令人惊讶的是它的工作示例非常少。 我尝试使用添加在样本中的ToyVpn,但我无法使其工作。 然后我发现了这个例子。 VpnService示例 该示例总结了以下步骤中的捕获。 创建一个TUN界面(我仍然不确定TUN是什么,但在互联网上冲浪说它是在设备上模拟网络层)。 通过TUN获取传入数据包和传出数据包的文件描述符。 将这些数据包转发到实际的服务器。 (不确定这是什么服务器?每个传出的数据包都有一个requestUrl ,所以服务器在这里意味着将请求委托给requestUrl服务器 。或者服务器意味着在AWS上的某个地方创建自己的服务器并重定向那里的所有流量,反过来将流量重定向到实际目的地)。 从服务器获取响应。 在TUN的帮助下,再次将此响应传递给应用程序的预期组件。 我使用下面的代码创建了一个TUN。 我给出了上面提到的教程中给出的地址。 不确定,是否有正确的值。 以及如何确定这个地址。 Builder builder = new Builder(); ParcelFileDescriptor mInterface = builder.setSession(“MyVPNService”) .addAddress(“192.168.0.1”, 24) .addDnsServer(“8.8.8.8”) .addRoute(“0.0.0.0”, 0).establish(); 接下来,我获得了文件描述符,并打开了隧道。 FileInputStream in = new FileInputStream( mInterface.getFileDescriptor()); DatagramChannel tunnel = DatagramChannel.open(); // I have created a EC2 instance on AWS, and gave […]

主机切换网络后,如何刷新Android模拟器网络连接?

我正在MacBook上运行Android API 23 x86模拟器。 当我切换WiFi网络时,Android模拟器会失去与互联网或内联网的所有连接。 每次我切换我的WiFi网络时,我都需要重新启动我的模拟器来重置虚拟Android设备的网络。 是否可以选择重新初始化模拟器的网络连接而无需重新启动?