Articles of tcp

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

如何使两个Android设备通过TCP进行通信

我们想在两个Android设备之间建立TCP / IP连接。 目前我们认为如果我们将连接设备设置为设备会更简单。 所以这两部手机之间没有服务器。 大多数时候(如果不总是)一个没有真正的IP地址(NAT等)。 这是创建TCP套接字的问题吗? 我没有find任何确切的信息。 任何建议和意见将受到高度赞赏。 谢谢

用于iOS / Android应用程序通信的基于TCP的RPC服务器(Erlang或类似的东西?)

我正在iOS和Android中构建本机移动应用程序。 这些应用程序需要与服务器进行“实时”更新,与任何其他基于网络的应用程序一样(Facebook,Twitter,社交游戏,如Words with Friends等) 我认为使用HTTP长轮询是因为长轮询可能对电池寿命有害,尤其是在大量TCP设置/拆除时。 让移动应用程序使用持久性TCP套接字建立与服务器的连接,并将RPC样式命令发送到服务器以进行所有Web服务通信可能是有意义的。 当然,这需要服务器处理长期存在的TCP连接,并且一旦理解了传递到TCP管道的数据,就能够与Web服务通信。 我正在考虑使用JSON或XML以纯文本格式传递数据。 也许基于Erlang的RPC服务器可以很好地用于这样的基于网络的应用程序。 这将允许移动应用程序通过一个连接从服务器发送和接收数据,而无需多个设置/拆卸,单个HTTP请求将使用类似iOS上的NSURLConnection。 由于不涉及Web浏览器,因此我们无需在移动客户端级别处理HTTP的细微差别。 很多这些“COMET”和长轮询/流媒体服务器都是基于HTTP构建的。 我认为只使用TCP上的纯文本协议就足够了,可以使客户端更具响应性,允许从服务器接收更新,并通过传统的长轮询和流模型保持电池寿命。 目前是否有人使用其原生iOS或Android应用程序执行此操作? 您是否编写了自己的服务器,或者是否有一些开源的东西,我今天可以开始使用而不是重新发明轮子? 有没有理由为什么只使用基于TCP的RPC服务比使用HTTP更糟糕? 我还研究了HTTP流水线技术,但在客户端实现它时看起来并不值得。 此外,我不确定它是否允许在客户端服务器通信通道中进行双向通信。 任何见解将不胜感激。

我们可以直接从Android设备发送数据到另一台android设备(p2p)吗?

我需要发送数据从一个Android设备到另一个Android设备直接(P2P)后,他们通过服务器find对方。 我读了一些东西,这是不能做的,但我不明白为什么可以访问互联网(它有一个IP权利?)的设备不能创build一个对等连接? 如果这不可能,为什么? 如果是这样的话? PS:我知道没有互联网我们不能达到这个目的,这个问题假设两个目标都有互联网连接,无论是gprs / 3g / 4g还是wifi互联网连接! 注意:我希望这是可能的无线和非WiFi互联网!

如何使Android上的客户端在C#上监听服务器?

我有Android上的客户端和C#上的服务器。 客户端发送消息到服务器,这很好。 但我需要服务器发送请求列表中的文件夹和文件在指定的目录,不知道该怎么做,因为客户端没有得到任何消息从服务器。 客户端的部分代码是用来监听的,但是应用程序只是在closures服务器应用程序之前进行了一些操作,然后再次运行,但是仍然不会读取任何内容。 提前致谢 客户: package com.app.client.app; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import android.util.Log; public class my_activity extends Activity { private TextView txt; @Override public void onCreate(Bundle savedInstanceState) { […]

无法通过无线连接通过亚行的Android – 我需要root访问?

我基本上是这样做的: 我怎样才能通过TCP连接到与ADB的Android? 与Droid X2。 我有USBdebugging,我的手机通过USB插入。 IP地址是10.0.78.33(我已经validation了我可以在该IP上的电话上进行TCP通信,我可以ping通它)。 我去命令行并执行以下操作: >> adb tcpip 5555 在TCP模式下重新启动端口:5555 >> adb connect 10.0.78.33:5555 无法连接到10.0.78.33:5555 任何想法,为什么这是行不通的? 为了做到这一点,我需要root权限吗? 我试图避免生根电话。 谢谢!

Android的TCP服务器客户端通信

我在这里find了一个写得很好的教程,用于在android上进行服 奇迹般有效。 但这只是沟通的一种方式。 我想在客户端听服务器响应,但不知道我在这里错了。 这里是我尝试进行更改的服务器的代码。 服务器 public class Server extends Activity { private ServerSocket serverSocket; Handler updateConversationHandler; Thread serverThread = null; private TextView text; public static final int SERVERPORT = 8080; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView) findViewById(R.id.text2); updateConversationHandler = new Handler(); this.serverThread = new Thread(new ServerThread()); this.serverThread.start(); } @Override […]