Articles of tcp

无法在Android上使用ServerSocket

我正在尝试在Android设备上使用ServerSocket侦听端口。 我希望能够使用同一网络上的计算机通过WiFi连接到此端口。 将它绑定到端口时我没有exception,但是当我检查netstat时它说: Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 (null):4040 (null):* LISTEN 我已经尝试了无数种方法将它绑定到localhost,0.0.0.0,设备的WiFi LAN IP地址与SocketInetAddress和InetAddress.getByName 。 似乎没什么用。 当我尝试从同一个WiFi中的计算机连接到端口时(我已尝试过netcat和Java的Socket.connect() ),我在Wireshark中看到的只是一个ARP请求: Who has [phone’s LAN address]? Tell [computer LAN address]. 此请求会重复,直到超时。 我尝试了相反的方法,通过在计算机上设置ServerSocket并从手机连接到该端口,这非常有效。 我的测试手机是带有自定义ROM的三星Spica i5700。 有任何想法吗? 编辑:代码很简单,如下所示: ServerSocket server = new ServerSocket(); server.setReuseAddr(true); server.setTimeout(0); server.bind(new InetSocketAddress(4040)); Socket client = null; while((client = server.accept()) […]

Android TCP连接最佳实践

我正在开发一个需要TCP连接到TCP服务器的Android应用程序(以Node.js编写) 我的Android TCP客户端正在工作,可以来回发送消息。 我的特定问题是: 在Android中处理与服务器的TCP连接的最佳方法是什么? 如何维护连接(在onDestroy()等上正确关闭连接)? 有什么方法然后使用AsyncTask(除了普通的Thread类,Android 4.0中不允许) 我在AsyncTask中有我的套接字连接,如下所示: @Override protected Void doInBackground(Void… params) { try { Log.d(“TCP_MESSAGE”, “Connecting…”); socket = new Socket(MY_LOCAL_IP, 8080); dataOutput = new DataOutputStream(socket.getOutputStream()); inputstream = new InputStreamReader(socket.getInputStream()); input = new BufferedReader(inputstream); while (!canceled) { String message = input.readLine(); handleMessage(message); } } catch (Exception e) { e.printStackTrace(); } } return null; […]

从Android(作为客户端)发送TCP数据 – 没有数据被发送?

我正在尝试通过TCP将数据从我的Android应用程序发送到我的PC。 代码如下: Socket socket = new Socket(“10.0.78.75”, 50505); OutputStream out = socket.getOutputStream(); PrintWriter output = new PrintWriter(out); mStatusText.setText(“Sending Data to PC”); output.println(“Hello from Android”); mStatusText.setText(“Data sent to PC”); socket.close(); mStatusText.setText(“Socket closed”); 这样做时我没有任何错误,但是,服务器应用程序(用C#编写)不会获得任何数据。 它看到客户端连接到它,并看到数据正在发送,但是,数据字符串是空的…并且想到为什么会发生这种情况? PS:服务器代码从以下站点复制,并已使用C#TCP客户端进行测试。 http://www.switchonthecode.com/tutorials/csharp-tutorial-simple-threaded-tcp-server

如何无限期建立TCP连接?

我需要无限期地建立TCP连接(尽可能)。 不是自己的服务器,所以我们不能改变它的工作方式。 此服务器每分钟都需要一些ping才能知道连接是否存在。 如果服务器在几分钟(少于五分钟)后没有收到ping,则会关闭连接和会话。 通过这种方式,我需要维护与服务器的TCP连接,并能够在指定的时间段发送ping。 目前我的Android服务标志为“正在进行”,因此Android不应该杀死它(至少通过正常程序)。 Android服务似乎运行良好,ping定期发送。 然而,当服务在移动电话(而不是模拟器)上运行并且它变得空闲时,android似乎在CPUhibernate时冻结服务,因此TimerTask发送ping停止工作并且连接断开。 我试图通过部分唤醒锁来锁定手机进入睡眠状态,它解决了问题,但手机耗电太多,这是不可行的。 我注意到AlarmManager可以帮助完成这项任务,所以我想安排一个警报来更新正在运行的服务,然后发送ping。 这将使CPU进入hibernate状态并发送ping。 但每分钟安排一个警报可能也是如此耗费电量? 我目前还没有测试过这种方法,但是可行吗? 是否有更好的方法来保持这种TCP连接? 像Gmail这样的Android服务如何解决这类问题?

Android模拟器如何在eclipse中联系主机开发机器?

我有一个正常的简单java程序作为服务器运行,等待客户端与TCP连接。 在另一个eclipse项目中,我正在构建一个Android应用程序。 该应用程序必须联系主机上运行的java程序以接收消息。 我不能简单地使用“localhost”联系服务器,因为仿真器在虚拟路由器后运行,我将访问“电话”的网络而不是主机的网络。 那么,我应该使用什么ip来联系主机开发机器? 该机器是在VirtualBox上运行的Linux,其Ip为10.0.0.5。 我试图在模拟器上使用该ip,但即便如此,我也无法建立连接。

Android上的长期持久TCP连接

我已经阅读了网上的一些文章以及关于StackOverFlow的一些问题,但似乎没有人肯定答复a)如果谷歌使用Long Lived TCP连接进行Gmail,Mail等,以及b)如果在自定义应用中使用它将耗尽电池寿命,如果这样大致多少?

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 > […]

adb.exe启动服务器失败了android studio

我键入adb nodaemon服务器错误:无法安装smartsocket侦听器:无法绑定到127.0.0.1:5037:通常只允许每个套接字地址(协议/网络地址/端口)的一个sage。 (10048) netstat -ano | findstr 5037 TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 5652 TCP 127.0.0.1:5037 127.0.0.1:55726 ESTABLISHED 5652 TCP 127.0.0.1:5037 127.0.0.1:55770 ESTABLISHED 5652 TCP 127.0.0.1:55726 127.0.0.1 :5037 ESTABLISHED 1620 TCP 127.0.0.1:55770 127.0.0.1:5037 ESTABLISHED 6488所以我找不到任何错误。我不知道显示adb.exe启动服务器失败。所以该怎么办请帮助解决

通过TCP套接字将音频写入服务器

我正在尝试通过TCP套接字和服务器将实时麦克风录制传输到服务器,以将输入流写入文件。 建立连接但是在一段时间后,我在客户端遇到连接拒绝错误。 服务器代码: public class auServer extends Thread{ private static ServerSocket serverSocket; private static int port = 3333; public void run() { System.out.println(“init success”); while(true) { try { serverSocket = new ServerSocket(port); serverSocket.setSoTimeout(10000); Socket clientSoc = serverSocket.accept(); System.out.println(“Waiting for client on port ” +serverSocket.getLocalPort() + “…”); System.out.println(“Just connected to ” + clientSoc.getRemoteSocketAddress()); InputStream in = […]

重用与HttpsUrlConnection的TCP连接

执行摘要:我在Android应用程序中使用HttpsUrlConnection类以串行方式通过TLS发送大量请求。 所有请求都是相同types的,并发送到同一主机。 首先,我会为每个请求获得一个新的TCP连接。 我能够解决这个问题,但并非在与readTimeout相关的某些Android版本上引起其他问题。 我希望有一种更强大的方法来实现TCP连接重用。 背景 在检查我正在使用Wireshark的Android应用程序的网络流量时,我观察到每个请求都会导致建立新的TCP连接,并且正在执行新的TLS握手。 这导致了相当大的延迟,特别是如果您使用的是3G / 4G,每次往返都需要相对较长的时间。 然后我尝试了没有TLS的相同场景(即HttpUrlConnection )。 在这种情况下,我只看到一个TCP连接正在建立,然后重新用于后续请求。 因此,建立新TCP连接的行为特定于HttpsUrlConnection 。 下面是一些示例代码来说明问题(真正的代码显然有证书validation,error handling等): class NullHostNameVerifier implements HostnameVerifier { @Override public boolean verify(String hostname, SSLSession session) { return true; } } protected void testRequest(final String uri) { new AsyncTask() { protected void onPreExecute() { } protected Void doInBackground(Void… params) { try { […]