当前位置:首页 » 安卓系统 » android连接tcp

android连接tcp

发布时间: 2022-12-16 06:29:33

㈠ android 切换网络时候TCP长连接怎么重连

1:android客户端通过service在后台通过servreScoket不断的accept,一旦有相应的socket到达,则启动一个线程去处理
2::在线程中处理完返回给我们android客户端的消息或任务之后,要将这种结果表现在ui上,这个步骤方法就比较多了,例如你可以发一个广播来通知ui,或者你可以通过一个static的handler来处理
*************************************service中的关键代码

㈡ 我怎样才能连接与亚行至Android通过TCP

手动处理 从您的设备,如果它是植根 根据对XDA开发后,您可以启用adb通过WiFi从装置su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

并且您可以禁用它,并返回亚行与监听USBsetprop service.adb.tcp.port -1
stop adbd
start adbd

从电脑,如果你有USB连接已经 这是更容易切换无线网络,如果你已经有了USB访问。从该行已在设备通过USB接口,连接问题adb tcpip 5555
adb connect 192.168.0.101:5555

一定要更换192.168.0.101与实际分配给您的设备的IP地址。 告诉亚行后台程序返回到监听通过USBadb usb

应用自动化进程 也有在谷歌播放的自动执行此过程的几个应用程序 CodeGo.net,快速搜索建议adbWireless,支持WiFiadb和adb的WiFi。所有这些都需要root权限,但adbWireless需要更少的权限。
2. 这是非常简单的。 首先确保你的手机是植根。 从市场上下载一个终端仿真器(有很多是free的)。 请确保您的Android连接到您的无线网络,并获得无线IP地址。 打开终端程序并键入:su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

现在去(假设你视窗)在桌面上创建一个快捷方式为“cmd.exe的”(不含引号)。 右键单击CMD快捷方式并选择"Run as Administrator"改变你的android-sdk-windows\tools folder类型:adb connect ***wifi.ip.address***:5555
(example: adb connect 192.168.0.105:5555)

亚行现在应该说你已连接。 注意:如果你太快给它可能会失败。所以,如果你说这是行不通的尝试至少2 5秒钟的时间间隔。
3. 我知道这是旧的,但我想补充我的2美分- 我需要得到两个USB和TCPIP工作的adb(不要问),所以我做了以下(使用方向其他人张贴的XDA开发) 运用adb shell:su
#set the port number for adbd
setprop service.adb.tcp.port 5555
#run the adbd daemon *again* instead of doing stop/start, so there
#are 2 instances of adbd running.
adbd &
#set the port back to USB, so the next time adb is started it's
#on USB again.
setprop service.adb.tcp.port -1
exit

4. 正如布赖恩说: 根据对XDA开发后,您可以启用adb通过WiFi从装置 对应setProp service.adb.tcp.port 5555 停止adbd 启动adbd 并且您可以禁用它,并返回亚行与监听USB 对应setProp service.adb.tcp.port-1 停止adbd 启动adbd 如果你有USB连接已经,它是更容易切换无线网络。从该行已在设备通过USB接口,连接问题 亚行TCPIP 5555 ADB连接192.168.0.101:5555 告诉亚行后台程序返回到监听通过USB 也有在Android Market上的几个应用程序能自动完成这些过程。 它works.You只需要访问Android shell,然后输入 另外一个(容易)解决方案是目前市场上:adbWireless,它会自动设置您的手机。 根是必须的!为...
5. 从adb --helpconnect <host>:<port> - connect to a device via TCP/IP

顺便说那行选项。 你应该尝试将手机连接到你的无线网络,然后得到它的IP从您的路由器,它不会工作,对 端口是5554
6. 您保存的adb路径到您的Windows路径 在Android激活调试模式 连接到PC 提示(有管理员右)类型:adb的TCPIP 5555 断开平板电脑,或从电脑智能手机 提示符下键入:ADB连接IPADDRESS(IP地址为您的平板电脑或智能手机的DHCP / IP地址,您可以通过无线网络找到->电流 现在,提示你应该看到类似的结果:连接到xxx.xxx.xxx.xxx:5555
7.adb tcpip 5555

奇怪,但是这只是工作,如果我有USB电缆连接,然后我就可以拔掉,并为它去与一切ADB。 而返回时,adb usb

只会工作连接。 没关系,如果我发出setprop service.adb.tcp.port 5555

或setprop service.adb.tcp.port -1

然后停止和启动adbd,我仍然需要电缆或这是行不通的。 所以,如果我的亚行不工作,我敢打赌,我将无法使亚行通过WiFi两种。
8. 你可以ssh本地端口转发。但它仍然涉及电缆。 您的USB连接(主机)与一个sshd运行。 在远程(游客)个人电脑开始能够portforwarding /隧道的ssh客户端端。 例如:砰砰-L 5037:本地主机:5037 这种结构给我的设备连接到虚拟机。 到是不够稳定(在调试过程中) SSH隧道工程为自由和更可靠。
9. 我不知道如何连接的设备,而在所有的任何一个USB连接,但如果你能,也许在您连接它可以通过发出切换adbd到TCP模式adb tcpip <port>

从终端,从任何PC上通过连接到您的设备通过WiFi:adb connect <ip>:<port>

也许也有可能从该装置上的终端切换到TCP模式。
10. 我觉得其他的答案就简单得多了adbWireless: 只需在手机上安装一个应用程序切换调试通过wifi,安装一个Eclipse插件,你就大功告成了。
11. 要连接您的TCP端口 请确保您的系统和设备连接到网络 1。打开控制台的cmd.exe 2,型号ADB TCPIP 5555 3。至系统->选项-> USB调试unchek它TCPIP连接 4.type ADB连接192.168.1.2这是您的设备ip地址 5。连接到192.168.1.2 如果你错误:未找到设备 连接设备到系统然后按照 为扎根设备 对应setProp service.adb.tcp.port 5555 停止adbd 启动adbd
12. 在我的系统是这样的: 我在我的Linux shell中的Android设备,一个简单的“使用ifconfig”没有我的IP地址。我只好类型: 用ifconfig eth0 -或- 加上netcfg 让我的IP地址。 (我知道是eth0的配置,我看到它在我的dmesg)然后我做了: 对应setProp service.adb.tcp.port-1 停止adbd 启动adbd 然后在我的Win7盒(一个运行Eclipse 3.7.1)。我打开提示 \\ Android的SDK \\平台工具> 没有以管理员身份运行。然后我做了一个 ADB连接12.345.678.90 我从来没有把一个端口。如果我做了 亚行TCPIP 5555 它说,它无法找到该设备,然后没有出现在我的“亚行的设备”列表中。即这只是工作,如果我不这样做上面。 我可以做一个“亚壳”与我的Android设备。但我的Android设备不现在出现在我的运行->运行配置-> Target选项卡。在另一方面,如果我把目标选项卡设置为自动。后来,当我通过运行我的应用程序运行->运行它并运行我的Android设备上,即使我的Android设备甚至没有列为我的目标之一。
13. 要使用TCP和USB模式之间切换只需你可以将它添加到/init.rc:on property:service.adb.tcp.port=*
restart adbd
on property:service.adb.tcp.enable=1
setprop service.adb.tcp.port 5555
on property:service.adb.tcp.enable=0
setprop service.adb.tcp.port -1

现在你财产service.adb.tcp.enable启用或禁用侦听端口5555。运行netstat以检查它是否在听。正如你可以看到它也会触发,如果你想改变service.adb.tcp.port手动。
14. 使用adbwireless应用程序,使手机,亚行从Windows机器连接到它对话。在手机上的应用程序adbwireless告诉你如何连接到它,给人的IP地址和一切。 要少得多有趣的选择是通过USB进行连接,告诉亚行通过TCPIP 5555手机TCPIP,然后断开USB,ADB连接。这是更难通过这种方式,你必须找出手机的IP地址,你自己(adbwireless告诉你的IP),你必须通过USB进行连接,你必须运行adb的TCPIP(adbwireless需要的是照顾过)。 所以:在手机上安装adbwireless。使用它。这是可能的,我这样做经常在Linux和Windows上。
15. 我放在一起自动启用和通过TCP连接adb,通过USB连接的设备的批处理文件。有了它,你不必把在IP手动。@echo off
setlocal
REM Use a default env variable to find adb if possible
if NOT "%AndroidSDK%" == "" set PATH=%PATH%;%AndroidSDK%\platform-tools
REM If off is first parameter then we turn off the tcp connection.
if "%1%" == "off" goto off
REM Set vars
set port=%1
set int=%2
if "%port%" == "" set port=5557
if "%int%" == "" set int=wlan0
REM Enable TCP
adb -d wait-for-device tcpip %port%
REM Get IP Address from device
set shellCmd="ip addr show %int% | grep 'inet [0-9]{1,3}(\.[0-9]{1,3}){3}' -oE | grep '[0-9]{1,3}(\.[0-9]{1,3}){3}' -oE"
for /f %%i in ('adb wait-for-device shell %shellCmd%') do set IP=%%i
REM Connect ADB to device
adb connect %IP%:%port%
goto end
:fail
echo adbWifi [port] [interface]
echo adbWifi off
goto end
:off
adb wait-for-device usb

㈢ Android网络请求知识(三)授权,TCP/IP,HTTPS建立过程

由身份或持有的令牌确认享有的权限,登录过程实质上的目的也是为了确认权限。

Cookie是客户端给服务器用的,setCookie是服务器给客户端用的。cookie由服务器处理,客户端负责存储

客户端发送cookie:账户和密码
服务端收到后确认登录setCookie:sessionID=1,记下sessionID
客户端收到sessionID后记录,以后请求服务端带上对比记录下sessionID,说明已经登录

会话管理:登录状态,购物车
个性化:用户偏好,主题
Tracking:分析用户行为

XXS:跨脚本攻击,及使用javaScript拿到浏览器的cookie之后,发送到自己的网站,以这种方式来盗用用户Cookie。Server在发送Cookie时,敏感的Cookie加上HttpOnly,这样Cookie只能用于http请求,不能被JavaScript调用
XSRF:跨站请求伪造。Referer 从哪个网站跳转过来

两种方式:Basic和Bearer

首先第三方网站向授权网站申请第三方授权合作,拿到授权方颁发的client_id和client_secret(一般都是appid+appkey的方式)。

在这就过程中申请的client_secret是服务器持有的,安全起见不能给客户端,用服务端去和授权方获取用户信息,再传给客户端,包括④,⑤的请求过程也是需要加密的。这才是标准的授权过程。
有了access_token之后,就可以向授权方发送请求来获取用户信息

步骤分析就是上面的内容,这里把第4,6,8请求的参数分析一下
第④步参数:
response_type:指授权类型,必选,这里填固定值‘code’
client_id:指客户端id,必选,这里填在平台报备时获取的appid
redirect_uri:指重定向URI,可选
scope:指申请的权限范围,可选
state:指客户端当前状态,可选,若填了,则认证服务器会原样返回该值

第⑥步参数:
grant_type:指使用哪种授权模式,必选,这里填固定值‘authorization_code’
code:指从第⑤步获取的code,必选
redirect_uri:指重定向URI,必选,这个值需要和第④步中的redirect_uri保持一致
client_id:指客户端id,必选,这里填在平台报备时获取的appid
client_secret:指客户端密钥,必选,这里填在平台报备时获取的appkey

第⑧步参数:
access_token:指访问令牌,必选,这里填第⑦步获取的access_token
token_type:指令牌类型,必选,大小写不敏感,bearer类型 / mac类型
expires_in:指过期时间,单位秒,当其他地方已设置过期时间,此处可省略该参数
refresh_token:指更新令牌,可选,用即将过期token换取新token
scope:指权限范围,可选,第④步中若已申请过某权限,此处可省略该参数

我们在上面的第八步中会有refresh_token的参数,这个在实际操作中也比较常见

有时候我们在自己的项目中,将登陆和授权设计成类似OAuth2的过程,不过去掉Authorization code。登陆成功返回access_token,然后客户端再请求时,带上access_token。

我们常常会说到TCP/IP,那到底是什么呢。这就需要讲到网络分层模型。TCP在传输层,IP在网络层。那为什么需要分层?因为网络不稳定,导致需要重传的问题。为了提高传输效率我们就需要分块,在传输层中就会进行分块。TCP还有两个重要的内容就是三次握手,四次分手。

HTTPS 协议是由 HTTP 加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护

1.客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度),客户端随机数,hash算法。

2.服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件,服务端随机数。服务器的加密组件内容是从接收到客户端加密组件内筛选出来的。

3.之后服务器发送Certificate报文。报文中包含公开密钥证书。一般实际有三层证书嵌套,其实像下面图二直接用根证书机构签名也是可以的,但是一般根证书机构比较忙,需要类似中介的证书机构来帮助。

4.最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。

5.SSL第一次握手结束后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。

6.接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。

7.客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密报文作为判定标准。

8.服务器同样发送Change Cipher Spec报文。

9.服务器同样发送Finished报文。

10.服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP响应。

11.应用层协议通信,即发送HTTP响应。

12.最后由客户端断开连接。断开连接时,发送close_notify报文。这步之后再发送TCP FIN报文来关闭与TCP的通信。

利用客户端随机数,服务端随机数,per-master secret随机数生成master secret,再生成客户端加密密钥,服务端加密密钥,客户端MAC secert,服务端MAC secert。MAC secert用于做报文摘要,这样能够查知报文是否遭到篡改,从而保护报文的完整性。

Android网络请求知识(一)HTTP基础概念
Android网络请求知识(二)对称和非对称加密、数字签名,Hash,Base64编码
Android网络请求知识(三)授权,TCP/IP,HTTPS建立过程

㈣ Android Http连接和TCP连接的区别

Http是应用层协议,TCP是网络层协议,应用层在TCP/IP四层架构中位于TCP的上一层。

建立Http连接在实现时有以下两种方式:
1、[java] view plain
DefaultHttpClient http = new DefaultHttpClient();
HttpGet method = new HttpGet(url);
HttpResponse response =http.execute(method);
2、[java] view plain
URL url = new URL(uri);
HttpURLConnection connection = (HttpURLConnection)
url.openConnection();
connection.connect();

而TCP连接在实现时要借助Socket(套接字 IP+端口号)
[java] view plain
Socket s = new Socket("localhost", 12345);

区别从这两个连接的实现方式就可以看出来,HTTP连接需要指明资源的URL,发出请求的应用不知道服务器的IP,虽然域名服务器也是要把域名解析成IP地址,但不属于应用所关心的范畴,是网络层应该完成的工作。所以Http连接属于无状态的短连接,若再请求其他数据,需要再重新建立连接。客户端向服务器发送请求后,服务器才知道客户端的存在。
TCP连接实现时需要指明IP地址和端口号,就可以跟目的主机通过三次握手建立联系,该连接一直保持直到某一方提出取消连接,通过四次握手关闭连接。Socket支持TCP/UDP协议,如果使用TCP协议,那么socket连接就是TCP连接。论文提到的应用场景是手机与云端的服务器建立联系,因为要保持连接并指定连接的建立时间,所以在这种场景下使用TCP连接最合适。3G网络不支持端到端建立TCP连接,因为它是client-server模式,所以需要通过云端服务器的辅助来实现手机的端到端通信。

㈤ Android推送SDK(9)-TCP网络问题

主目录见: Android高级进阶知识(这是总目录索引)
[written by 无心追求 ]



把Http和TCP连接服务做区分导致IM的TCP使用80端口连接进来的时候被误

识别成是一个Http请求,所以就对IM的TCP数据流(TLV格式)进行解析导

致报错返回了一个Http请求报错的网页的Html数据,具体返回的数据格式

客户端打印是:

以上是客户端TCP数据流read到100字节打印出来的数据,是一个Http请求

失败返回Http状态码为400的网页Html数据

以上是tcpmp抓包信息,从抓包信息中可以得知返回的数据确实是一个

Http请求失败的网页,对比客户端程序log打印是吻合的

式的数据,所以对read到的数据进行常规的TLV数据解析导致程序解析报错

(数组越界):

客户端发生数据解析报错之后会认为当前接收到的数据已经不正确,同时

也会认为后面接续读取的数据也将不正确,所以会把socket连接关闭重连



应该下调心跳周期,但是旧版(1.0.1Realease-1.0.6Realease版本)存在

不足,并没有对此做过滤处理,所以会不断的下调心跳

断线后会马上重连

接断开的域名和端口再次尝试重连,在重试重连失败的时候才会去切换域

名或者端口,而遇到这种情况,每次尝试重连TCP都能连接成功,连接成功

之后,数据解析失败又把TCP连接断开,然后再拿原来的域名和端口,再重

连,再断开,如此陷入死循环,无法切换域名或者端口,断线重连频率很

高:

TCP连接IM服务器gw.im.okii.com成功,连接端口为80

入的TCP数据为323个字节

的数据进行解析

srcPos=2 dst.length=121 dstPos=0 length=121表示数据解析报错,数组

越界

误的识别成Http短连接

不下调心跳间隔,避免心跳误下调,影响心跳探测的准确性

时间间隔递增重连,避免频繁的重连

一些常用的端口,例如8080,443,1000一下的端口等都不能使用,避免出

现类似的问题

和端口去再次连接IM服务器导致无法跳出这个域名和端口连接造成的异常

,如果客户端有成功切换域名或者端口,那么遇到上述情况会立即切换到

8000端口,次数连接就会恢复正常

上传大数据的手表分析来看全部都恢复正常使用

111.44.228.186这个地址(正确的应该是106.75.86.52),而被误识别成

Http短链接,然后返回一个错误的网页html数据,然后客户端接收到数据

后解析报错,导致频繁的断线重连和心跳下调

跳误下调,重连频繁,与香港的原因类似

gw.im.okii.com本地dns解析出来的ip为111.44.228.186,由此确认是被劫

持了

客户端对接收到的TCP数据解析异常,数

组越界

客户端在数据解析异常后断线

连接断开后心跳下调

㈥ 关于Android tcp连接

安卓的主线程中是不能用耗时性的操作读写,所以,把SOCKET读写操作都要放到线程中。
可以用即时线程的办法。参考我的SOCKET客户端。

//--------Socket服务端----------------------
void dispClients()
{ //显示所有客户
int n=vector.size();
String ss="\n"+n+" clients:\n";
for (int i=0;i<vector.size();i++)
{
Socket sk=vector.get(i);
String ip=sk.getInetAddress().toString();
String port=""+sk.getPort();
ss+=""+ip+","+port+"\n";
}
textView1.setText(ss);
}
void writeSocket(Socket sk,String s)
{ // 向客户端Socket发字符串
DataOutputStream outf;
try
{
outf=new DataOutputStream(sk.getOutputStream());
if (!sk.isClosed())
outf.writeUTF(s);
}
catch(Exception e)
{
try
{
setTitle("err");
sk.close(); // 对方已关闭
}
catch(Exception e1)
{
}
}
}
void writeSock(final Socket sk,final String s)
{ // 子线程中向客户端Socket发字符串
new Thread(new Runnable()
{
@Override
publicvoid run()
{
writeSocket(sk,s);
}
}).start();
}
void sendAll(final String s)
{ // 向所有管理中的客户Socket发串
boolean del=false;
for (int i=0;i<vector.size();i++)
{
Socket sk=vector.get(i);
if (sk.isClosed())
{
vector.remove(i); // 已断开的连接
del=true;
}
else
writeSock(sk,s);
}
if (del)
{ // 客户端有变化,通知主程序刷新显示
Message msg=sHandler.obtainMessage(0,"");
sHandler.sendMessage(msg);
}
}

void readSocket(Socket sk)
{ // 服务端读Socket
DataInputStream inf;
try
{
inf=new DataInputStream(sk.getInputStream());
while(sk.isConnected() && !sk.isClosed())
{
String s=inf.readUTF();
if (s.length()>0)
{ // 读到字符串后,通知主程序处理
String ip=sk.getInetAddress().toString();
String port=""+sk.getPort();
s=ip+","+port+":"+s+"\n";
Message msg=sHandler.obtainMessage(1,s);
sHandler.sendMessage(msg);
}
}
}
catch(Exception e)
{
}
}
void readSock(final Socket sk)
{ // 子线程中读
new Thread(new Runnable()
{
@Override
publicvoid run()
{
readSocket(sk);
}
}).start();
}

void listen(ServerSocket ssk) // 接受多个客户端连接请求
{
while (!ssk.isClosed())
try
{
Socket sk=ssk.accept();
vector.add(sk); // 有客户连接
readSock(sk);
// 通知刷新客户列表
Message msg=sHandler.obtainMessage(0,"");
sHandler.sendMessage(msg);
}
catch(Exception e)
{
}
}
void listen() // 线程接受多个客户端连接请求
{
new Thread(new Runnable()
{
@Override
publicvoid run()
{
listen(serverSocket);
}
}).start();
}

//---------Socket客户端----------------------------------
cHandler=new Handler()
{ // 客户端消息处理器
@Override
public void handleMessage(Message msg)
{
String s=msg.obj.toString();
textView2.append(s);
}
};
clientRead("127.0.0.1",9003);
// clientRead("10.0.2.15",9003);

textView2=(TextView)findViewById(R.id.textView2);
textView2.setText("");
editText1=(EditText)findViewById(R.id.editText1);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
try
{
String s=editText1.getText().toString();
writeSock(clientSocket,s);
}
catch(Exception e)
{
}
} //public
});
button2=(Button)findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
try
{
clientSocket.close();
String s="中华人民共和国";
Message msg=sHandler.obtainMessage(1,s);
sHandler.sendMessage(msg);
}
catch(Exception e)
{
}
} //public
});

}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{ // 按返回键的退出处理
if (keyCode == KeyEvent.KEYCODE_BACK )
{
try
{ // 防止出现端口已绑定的错误
serverSocket.close();
finish();
System.exit(0);
}
catch(Exception e)
{
}
}
return(false);
}

㈦ Android Http连接和TCP连接的区别

http是应用层协议,tcp是传输层协议,tcp为http提供服务。tcp负责了数据传输的可靠性。而Http是典型的利用tcp实现短连接,客户端发出一次请求,服务器回应后立刻断开!tcp还能实现长连接来实现像即使通讯和推送。不只是安卓,在任何网络设备都适用这个原理!

热点内容
新闻压缩要素 发布:2025-05-17 22:22:11 浏览:118
耳机没有声音怎么办安卓 发布:2025-05-17 22:16:29 浏览:582
bc8android导航 发布:2025-05-17 22:15:50 浏览:639
什么配置的车标好 发布:2025-05-17 21:41:20 浏览:203
linux支持线程 发布:2025-05-17 21:26:14 浏览:184
元神队伍配置都由什么组成 发布:2025-05-17 21:20:18 浏览:477
闲鱼和安卓哪个赚钱 发布:2025-05-17 21:15:56 浏览:584
c语言一个c源程序 发布:2025-05-17 21:11:44 浏览:315
如何加密手机的文件 发布:2025-05-17 21:11:43 浏览:917
ios开发文件上传 发布:2025-05-17 21:10:40 浏览:984