Articles of 套接字

Android:使用带Socket的Closeable接口的exception

当我尝试通过其Closeable接口关闭套接字时,我得到一个exception: new java.net.Socket().close(); // no error ((java.io.Closeable) new java.net.Socket()).close(); // Throws: java.lang.IncompatibleClassChangeError: interface not implemented 这是为什么? 问题仅出在Android设备上,而不是桌面上运行的Java程序。

当应用程序在设备上运行时,无法获取uiautomator工具中的元素

我有一个设置,我的电脑中的Web应用程序正在访问连接设备上运行的应用程序信息。(通过USB调试)。 并不断将应用程序数据发送到Web应用程序(PC)。 我正在使用selenium(web GUI)和appium(设备)自动执行此操作以进行自动化测试。 问题:一旦应用程序在设备中启动并与Web应用程序通信(在我的PC中),我无法从uiautomator.bat工具连接到设备。 得到以下错误。 是否有针对此问题的解决方法。 ——– uiautomator.bat日志———– C:\ Users \ sat_yug \ android-sdks \ tools> uiautomatorviewer.bat 03:57:35 E / DeviceMonitor:Adb连接错误:远程主机强制关闭现有连接03:57:36 E / DeviceMonitor:连接尝试:1 03:57:38 E / DeviceMonitor:连接尝试次数:2 03:57:40 E / DeviceMonitor:连接尝试次数:3 03:57:42 E / DeviceMonitor:连接尝试次数:4 03:57:44 E / DeviceMonitor:连接尝试:5 03:58:04 E / DeviceMonitor:Adb连接错误:远程主机强行关闭现有连接 ———— adb devices log ——————— C:\ Users \ sat_yug \ […]

InetAddress.getLocalHost()。getHostAddress()在Android中返回127.0.0.1

我的应用程序使用多播在一段时间内发送信标以及加入多播组的主机的协议消息和IP。 在Android设备中,它返回127.0.0.1。 我环顾四周,发现有很多人建议更改主机文件。 但是,在android的情况下,在我的上下文中是不可能的。 如何获取设备的真实IP,而不是环回地址.. private void getLocalAddress() { try { String localHost = InetAddress.getLocalHost().getHostAddress(); servers.add(localHost); } catch (UnknownHostException e) { e.printStackTrace(); } }

Android – 服务器套接字

我对Android中的套接字通信几乎没有疑问。 1)我开发了用于android的服务器套接字应用程序,用于侦听端口8888。 a)当我在模拟器上托管我的服务器时,我无法通过我的PC上的客户端应用程序与它进行通信,因为两个(模拟器和客户端)应用程序都在我的笔记本电脑和同一网络上,我认为它们应该是能够相互沟通。 b)当我在我的Android移动设备上部署相同的服务器应用程序并尝试通过我在PC上的相同客户端应用程序进行通信时,客户端应用程序会发出超时exception,因为它无法与之通信。 我的第一个问题是如何使用Emulator&1 android设备测试服务器/客户端套接字应用程序? 我甚至可以使用我的PC的客户端套接字应用程序来测试我的服务器套接字吗? **我的其他应用程序有客户端套接字应用程序,因此客户端应用程序没有问题。 2)我的第二个问题是在Android设备上测试我的服务器应用程序我是否必须转发所需的端口? a)对于仿真器:如何转发端口? b)对于设备:我如何转发端口? c)我能以编程方式转发端口吗? **仅供参考: 我正在使用Eclipse作为android开发工具。 **我的服务器代码,因为我的服务器套接字代码也可能有问题。 Socket socket = null; DataInputStream dataInputStream = null; DataOutputStream dataOutputStream = null; ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(SERVERPORT); System.out.println(“Listening :” + SERVERPORT); System.out.println(“Server IP:” + SERVERIP); } catch (Exception e) { e.printStackTrace(); } while(true) { try […]

如何在java代码中为数据报套接字设置重用地址选项?

在我的应用程序中,将有一个线程始终在运行,并将发送或侦听某个端口。 此应用程序在后台运行。 有时在创建套接字时,我发现之前由同一个线程使用的端口没有在套接字的close()上释放。 所以我试着这样 dc = new DatagramSocket(inetAddr); dc.setReuseAddress(true); 问题是,它还没有到达第二行。 在第一行本身我得到了expcetion BindException: Address already in use 。 谁能帮助我如何处理这种情况。 有没有办法释放端口? 感谢和问候, SSuman185

Android Socket:java.net.SocketException:没有到主机的路由

我正在尝试从Android设备连接(通过TCP)到我的机器上运行的服务器。 我的清单文件中有android.permission.INTERNET : 我可以使用模拟器进行连接,但是从设备尝试会抛出错误: Android Socket: java.net.SocketException: No route to host 谁能请帮忙。

Apache HttpClient 4.0在Android上无法为套接字超时

我正在开发一个Android应用程序,需要使用HttpClient才能将文件从Android设备上传到Web服务器。 我上传的文件最大可达1 Gb,因此如果设备在上传过程中丢失连接,可能会发生超时。 奇怪的是,我为套接字设置的超时似乎没有任何影响。 每当我失去连接而不是引发SocketTimeoutException时,应用程序就会挂起。 我试过用: HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT); HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT); 但这只适用于连接超时,而不是套接字超时。 我也尝试过: HttpParams p = httpclient.getParams(); p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000); p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000); 我知道连接超时工作的原因是因为,我会在执行后获得连接超时的exception httpclient.execute(httppost); 在上载期间连接丢失时,应用程序似乎挂起,但在应用程序成功连接到服务器之后。 为了测试我的应用程序,我在不同的时间禁用了网络以查看应用程序的反应。 如果我在发送请求之前禁用网络,我会收到连接错误,我的应用程序可以正常处理,但如果我在上传期间禁用它,应用程序将挂起。 当然,我正在通过AsyncTasks执行所有这些请求,因此主UI线程不会崩溃。 我只是想知道是否还有其他方法可以确保套接字在没有收到任何数据时会超时,或者我在这里遗漏了什么。 我已经阅读了很多博客和post,但大多数人只是建议使用SO_TIMEOUT,这对我不起作用。 sotimeout不能在android 2.1上的多部分httppost中工作

ANDROID – 通过tcp socket将截图从java发送到android

我通过套接字进行了客户端 – 服务器聊天,效果很好。 现在我想为服务器(Android手机)添加一个选项来从客户端(pc应用程序)抓取屏幕截图。 创建屏幕截图工作正常,但每次从客户端到服务器的传输都会失败。 客户端/发送者: 在我将图像直接写入输出流之前,我在服务器端出错,所以我尝试了这种方式,但它是一样的。 public class ClientScreenshotThread implements Runnable { // – Software Init – // private Socket transferSocket; private BufferedImage screenshot; private Robot robot; private BufferedWriter outToServer; private FileInputStream inStream; private DataOutputStream outStream; // – Var Init – // private final int SERVER_TRANSFER_PORT = 65000; private int screenWidth, screenHeight; // ————————————————– […]

在Android上接收广播消息

首先 – 对不起我的英语,我不是“本土作家”。 我正在用C ++发送广播消息,并希望在Android设备上接收它。 我创建了这样的代码: System.out.println(“receiveBroadcast()”); DatagramSocket socket = new DatagramSocket(3866); socket.setBroadcast(true); System.out.println(“Listen on ” + socket.getLocalAddress() + ” from ” + socket.getInetAddress() + ” port ” + socket.getBroadcast()); byte[] buf = new byte[512]; DatagramPacket packet = new DatagramPacket(buf, buf.length); while (true) { System.out.println(“Waiting for data”); socket.receive(packet); System.out.println(packet.getAddress()); System.out.println(“Data received”); } 当我将其编译为标准的Java SE控制台应用程序并在连接到网络的其他计算机上运行时,它可以工作。 它不适用于Android,我不知道为什么。 […]

RDP通过蓝牙

这是一个研发项目。 通过蓝牙将Windows PC的桌面流式传输到手机上。 我成功将桌面流式传输到我的Android手机720p,但问题是我无法获得直播。 通过蓝牙进行编码和数据需要几毫秒,所以它不是那么活。 所以我做了什么,我为此选择了RDP。 由于RDP仅适用于LAN。 我没有PAN的个人资料。 我写了一个代理,它只通过蓝牙将RDP数据包从localhost路由到我的电脑。 在计算机端,还有另一个程序正在运行,该程序从蓝牙获取数据并将此数据发送到localhost端口3389.现在我面临的问题是,当连接启动时,套接字会自行关闭。 程序最初只读取80或45个字节,然后发生exception“Socket Closed”。 我的问题是,RDP是否为会话打开和关闭套接字,或者是第一次连接然后使用该套接字。 因为我是这个RDP的新手。 建议我一些关于RDP的话题。 任何帮助都非常感谢。 关于Moonzai 更新: 我正在使用以下代码来读取和写入蓝牙和套接字。 class ReadWrite implements Runnable { private String name; private Thread thread; private InputStream is; private OutputStream os; private volatile boolean start = false; public ReadWrite(String name, InputStream is, OutputStream os) { this.name = name; this.is = […]