Articles of 网络

如何使用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设备的网络。 是否可以选择重新初始化模拟器的网络连接而无需重新启动?

从网络资源搜索建议到快速搜索框

我正在应用程序中构建搜索,并且需要有一种方法可以将我从服务器获得的建议作为JSON数组放入快速搜索框下方显示的建议列表中。 有一种简单的方法可以让快速搜索框读取这些资源吗? 目前我正在尝试使用ContentProvider,但接口方法清楚地表明应该查询数据库以获取建议。 我想如果您正在搜索存储在应用程序中的数据,那么使用ContentProvider是正确的方法。 但是,我不太确定,如果您需要查询网络资源,这是正确的方法。 我将从网络获得的建议保存到本地数据库是没有意义的,因为建议及其命中率会不时变化。 谁有这个问题? 或者可以指出我在类似问题的方向? 我在堆栈上找不到提到网络建议的问题。

强制Android使用没有互联网的Wifi网络

我正在构建一个Android应用程序,需要通过无法访问互联网的WiFi网络进行通信。 问题是即使连接WiFi,当wifi网络上没有连接互联网时,机器人选择使用蜂窝/移动数据。 我已经阅读了很多关于该问题的post,其中许多涉及生根设备,但生产应用程序无法实现这一点(生根设备不是一种选择)。 其他解决方案(如我的代码bellow)建议使用bindProcessToNetwork() ,它在我的Sony Z2上完美运行,但在我测试过的其他设备上没有(所有运行6.0.1) private void bindToNetwork() { final ConnectivityManager connectivityManager = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkRequest.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { builder = new NetworkRequest.Builder(); //set the transport type do WIFI builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { connectivityManager.bindProcessToNetwork(null); if (barCodeData.getSsid().contains(“screenspace”)) { connectivityManager.bindProcessToNetwork(network); } […]

在模拟器android上停止Internet访问

我在从互联网上检索数据后测试数据库存储,我希望能够启动互联网工作的模拟器,然后,当它运行时,停止互联网访问以强制它使用数据库作为显示数据的源。 那可能吗?

Android DatagramSocket错误消息:EADDRINUSE(地址已在使用中)

我正在尝试编写一个简单的Android聊天应用程序。 我创建了一个处理所有网络通信的服务类。 DatagramSocket绑定在一个单独的线程中。 一旦进入,我收到此错误并且应用程序崩溃: java.net.BindException: bind failed: EADDRINUSE (Address already in use) at libcore.io.IoBridge.bind(IoBridge.java:89) at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:68) at java.net.DatagramSocket.createSocket(DatagramSocket.java:133) at java.net.DatagramSocket.(DatagramSocket.java:78) 这是推销它的代码。 使用新DatagramSocket的行发生错误如何避免此错误? 谢谢。 private class ComThread extends Thread { private static final int BCAST_PORT = 8779; DatagramSocket mSocket; InetAddress myBcastIP, myLocalIP; public ComThread() { try { myBcastIP = getBroadcastAddress(); if (D) Log.d(TAG, “my bcast ip […]

使用Square的Retrofit Client,是否可以取消进行中的请求? 如果是这样的话?

我正在使用Square的Retrofit Client从Android应用程序发出短期json请求。 有办法取消请求吗? 如果是这样,怎么样?