ps:模拟器做服务器,PC机做客户端。如果通过wifi连接的话直接访问IP就行,不用重定向。
PC访问模拟器用localhost即127.0.0.1, 模拟器访问 模拟器用10.0.2.2
本人已成功运行,看你的RP了- -
server:
-
-
-
-
-
-
packagecom.warner.client;
-
-
importjava.io.BufferedReader;
-
importjava.io.BufferedWriter;
-
importjava.io.Console;
-
importjava.io.IOException;
-
importjava.io.InputStreamReader;
-
importjava.io.OutputStreamWriter;
-
importjava.io.PrintWriter;
-
importjava.net.Socket;
-
-
publicclassG3ExpPCclient{
-
publicstaticfinalStringadb_path="E:\\android-sdk-windows\\tools\\adb";
-
privatestaticfinalStringHOST="localhost";
-
privatestaticfinalintPORT=8080;
-
privateSocketsocket=null;
-
privateBufferedReaderin=null;
-
privatePrintWriterout=null;
-
-
publicG3ExpPCclient(){
-
try{
-
socket=newSocket(HOST,PORT);
-
in=newBufferedReader(newInputStreamReader(socket.getInputStream()));
-
out=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
-
}catch(IOExceptionex){
-
ex.printStackTrace();
-
System.out.println("loginexception"+ex.getMessage());
-
}
-
}
-
-
publicvoidopenUrl(Stringmsg){
-
if(socket.isConnected()){
-
if(!socket.isOutputShutdown()){
-
out.println(msg);
-
}
-
}
-
}
-
-
publicstaticvoidmain(String[]args){
-
try{
-
-
-
Runtime.getRuntime().exec(G3ExpPCclient.adb_path+"forwardtcp:8080tcp:8090");
-
System.out.println("已经将虚拟机端口8090绑定到PC端口8080"+adb_path);
-
}catch(IOExceptione1){
-
e1.printStackTrace();
-
}
-
-
G3ExpPCclientpc=newG3ExpPCclient();
-
-
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
-
-
while(true){
-
-
Stringmsg="";
-
-
try{
-
msg=br.readLine();
-
System.out.println("将打开:"+msg);
-
}catch(IOExceptione){
-
e.printStackTrace();
-
}
-
-
if(msg.equals("exit")){
-
System.out.println("退出");
-
System.exit(-1);
-
}else{
-
pc.openUrl(msg);
-
}
-
}
-
}
-
}
client:
-
-
-
-
-
-
packagecom.warner.activity;
-
-
importjava.io.BufferedReader;
-
importjava.io.InputStreamReader;
-
importjava.net.ServerSocket;
-
importjava.net.Socket;
-
-
importandroid.app.Activity;
-
importandroid.content.Intent;
-
importandroid.net.Uri;
-
importandroid.os.Bundle;
-
importandroid.os.Handler;
-
importandroid.os.Message;
-
importandroid.util.Log;
-
importandroid.widget.TextView;
-
-
publicclassG3ExpextendsActivity{
-
-
privatefinalintSERVER_PORT=8090;
-
privateTextViewtextView;
-
privateStringcontent="";
-
-
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.g3exp);
-
textView=(TextView)findViewById(R.id.g3_msg);
-
-
-
newThread(){
-
publicvoidrun(){
-
startServer();
-
}
-
}.start();
-
}
-
-
privatevoidstartServer(){
-
try{
-
-
ServerSocketserverSocket=newServerSocket(SERVER_PORT);
-
-
while(true){
-
Socketclient=serverSocket.accept();
-
-
try{
-
Log.e("hehheh","有人来访:");
-
-
BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream()));
-
Stringstr=in.readLine();
-
content+=str+"\n";
-
mHandler.sendMessage(mHandler.obtainMessage());
-
openUrl(str);
-
}catch(Exceptione){
-
e.printStackTrace();
-
}finally{
-
client.close();
-
}
-
Thread.sleep(3000);
-
}
-
}catch(Exceptione){
-
e.printStackTrace();
-
}
-
}
-
-
privatevoidopenUrl(Stringurl){
-
Uriuri=Uri.parse(url);
-
Intentintent=newIntent(Intent.ACTION_VIEW,uri);
-
startActivity(intent);
-
}
-
-
publicHandlermHandler=newHandler(){
-
publicvoidhandleMessage(Messagemsg){
-
super.handleMessage(msg);
-
textView.setText(textView.getText().toString()+content);
-
}
-
};
-
}
别忘了加:<uses-permissionandroid:name="android.permission.INTERNET"/>
=====================================================================================
下面是从别人那转过来的:
最近在做UDP、TCP通信相关的项目,在做的过程中发现:同一台电脑的两个模拟器之间不能通信,
解决方法:
1. 运行模拟器
2. 打开window 命令行
执行:telnet localhost 5554 或者是 telnet 127.0.0.1 5554
5554是模拟器的端口,执行之后会进入android console
3. 在console下执行:
redir add udp :端口号:端口号
例如:
redir add udp:22221:22221
其中,第一个端口号是模拟器1的端口,第二个端口号是模拟器2端口。(端口映射)
执行此命令之后,会把模拟器 22221 端口发送的数据通过本机转到模拟器的22221端口,就能从22221端口接收UDP数据包了
http://my.oschina.net/u/211111/blog/40117
进行TCP通信的时候,在本机上启动两个模拟器,本机(PC)和模拟器时发现两个模拟器的IP地址都是完全一样的,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的。必须进行端口映射。
模拟器提供了一个特殊的IP,此IP的地址为10.0.2.2,此IP地址可以说等同于PC本机的IP地址127.0.0.1。所以,通过此特殊IP地址,实现PC本机与模拟器的通信是没有问题。
首先
,运行模拟器在命令行adb
–s emulator -模拟器 forward tcp:端口号 tcp:端口号(例如:adb
–s emulator-5554 forward tcp:8080 tcp:8090)
PC-SERVER:ServerSocket
server = new ServerSocket(8080);
模拟器-CLIENT:Socket
socket = new Socket("10.0.2.2", 8090);
接下来是如何在两个模拟器之间进行通信:同样的先进行端口映射:adb
–s emulator -模拟器 forward tcp:端口号 tcp:端口号(先运行模拟器).代码如下:
adb
–s emulator-5554 forward tcp:8080 tcp:8081
模拟器(5554)-SERVER:ServerSocket
server = new ServerSocket(8080);
模拟器(5556)-CLIENT:Socket
socket = new Socket("10.0.2.2", 8081);
ps:我觉得应该是:
模拟器(5554)-SERVER:ServerSocket
server = new ServerSocket(8081);
模拟器(5556)-CLIENT:Socket
socket = new Socket("10.0.2.2", 8080);
因为模拟器5556连接的地址10.0.2.2:8080相当于本机的127.0.0.1:8080,由于进行了端口映射本机IP8080上的连接请求都映射到5554:8081上,因此模拟器5556的请求会发送到5554上.
http://my.oschina.net/u/211111/blog/40057
当PC与手机连通时,我们可以通过Socket连接来实现PC与手机间的通信。
这里我们先讨论手机做为Server端、PC做为Client端的情况。
和其他Java Socket程序一样,只需要定义一个SocketServer即可实现Server端的监听,如下:
-
ServerSocketserverSocket=newServerSocket(SOCKET_PORT);
写Java Socket的时候,我们都知道,要连上这个Server,只需要知道Server的IP地址和Port号就可以了。这里因为手机是和PC相连的,因此麻烦就在于怎么定位这个IP地址和Port号。
IP地址其实也就是本机地址,而port号则需要有一点点技巧,需要用到adb工具。查看adb帮助中,有一条forward命令可以用于完全任务:
-
adbforward<local><remote>-forwardsocketconnections
-
forwardspecsareoneof:
-
tcp:<port>
-
localabstract:<unixdomainsocketname>
-
localreserved:<unixdomainsocketname>
-
localfilesystem:<unixdomainsocketname>
-
dev:<characterdevicename>
-
jdwp:<processpid>(remoteonly)
使用如下:
adbforward tcp:Local_Port tcp:Remote_Port
也即将本地的Local_Port端口,映射为Remote_Port端口,这里的Remote_Port即为上面的SOCKET_PORT。
所以Client代码可以如下实现:
-
Stringadb_path=....;
-
-
Runtime.getRuntime().exec(adb_path+"forwardtcp:LocalPorttcp:Remote_Port");
-
-
Socketsocket=newSocket("localhost",Local_Port);
即可实现PC与Android之间的通信。这里注意Android端需要有网络访问的权限:
-
<uses-permissionandroid:name="android.permission.INTERNET"/>
Android与PC机通讯总结:
1. 通过ADB接口进行通信
具体依据:
adb方式,需要安装手机的usb驱动,直接程序中调用adb命令。
wifi是端口传输,也需要调用adb
如果是通过 wifi进行交互,设置IP通过socket就可以进行通信了。如果是使用USB则需要使用adb里面的端口重定向(端口重定向是指:在PC端通过SOCKET向手持机发送连接时,当PC尝试连接本机的127.0.0.1:2525时,当使用重定向端口号后adb forward tcp:2525 tcp:2525时,当PC尝试连接127.0.0.1:2525时,PC机会将发送此端口的数据转发至手持机)。如果想通过SOCKET方式通过USB连接手持机,可能要写一套适用的SOCKET 协议,还要补充一点的是:当把手机当作server端时则需要使用端口重定向,如果是把PC当SERVER时,则通过手持机可以直接通过SOCKET连接即可
2. PC客户端与Android服务端的Socket同步通信(USB),通讯的具体过程及实现方法,请查看内嵌文件
3. PC机作为服务端与Android间的通信,具体实现方法请查看内嵌文件
http://zhaoshaofang.iteye.com/blog/1051548
android开发中,android虚拟机作为服务器与pc客户端实现socket网络通讯中,android虚拟机的ip是多少?
android施用的仅只施用了pc 里边的1个端口
ip自然就是127.0.0.1了,或者是localhost吧
关于5037口和5555口,找到了1个看起来合理的解释:
adb(android debug bridge)包括三个部门:
1)adb client, 运行在pc上(为ddms,即ide工作)
2)adb daemon(守护进程项), 运行于emulator(为与emulator中的vm交互工作);
3)adb server(服务进程项), 运行在pc(任务管理器上有),管理着adb client和adb daemon的通讯.server与client通讯的端口是是5037,
adb server会与emulator交互的,施用的端口有两个,1个是5554专门用于与emulator实例的连接,那末数据可以从emulator转发给ide控制台了,另1个则是5555,专门与adb daemon连接为后面调试施用。
127.0.0.1
从exlipse启动的android虚拟机访问本机上的ip:10.0.2.2
分享到:
相关推荐
轴类零件加工工艺设计.zip
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
seaborn基本绘图人力资源数据集
移动机器人(sw三维)
自制html网页源代码查看器
3吨叉车的液压系统设计().zip
1_实验三 扰码、卷积编码及交织.ppt
北京交通大学软件学院自命题科目考试大纲.pdf
雅鲁藏布江流域 shp矢量数据 (范围+DEM).zip
基于RUST的数据结构代码示例,栈、队列、图等
NIFD:2024Q1房地产金融报告
详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/146916652
【工业机器视觉定位软件Vision-Detect】基于C#的WPF与Halcon开发的工业机器视觉定位软件(整套源码),开箱即用 有用户登录,图片加载,模板创建,通讯工具,抓边抓圆,良率统计,LOG日志,异常管理,九点标定和流程加载保存等模块,功能不是很完善,适合初学者参考学习。 资源介绍请查阅:https://blog.csdn.net/m0_37302966/article/details/146912206 更多视觉框架资源:https://blog.csdn.net/m0_37302966/article/details/146583453
内容概要:本文档详细介绍了Java虚拟机(JVM)的相关知识点,涵盖Java内存模型、垃圾回收机制及算法、垃圾收集器、内存分配策略、虚拟机类加载机制和JVM调优等内容。首先阐述了Java代码的编译和运行过程,以及JVM的基本组成部分及其运行流程。接着深入探讨了JVM的各个运行时数据区,如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区等的作用和特点。随后,文档详细解析了垃圾回收机制,包括GC的概念、工作原理、优点和缺点,并介绍了几种常见的垃圾回收算法。此外,文档还讲解了JVM的分代收集策略,新生代和老年代的区别,以及不同垃圾收集器的工作方式。最后,文档介绍了类加载机制、JVM调优的方法和工具,以及常用的JVM调优参数。 适合人群:具备一定Java编程基础的研发人员,尤其是希望深入了解JVM内部机制、优化程序性能的技术人员。 使用场景及目标:①帮助开发人员理解Java代码的编译和执行过程;②掌握JVM内存管理机制,包括内存分配、垃圾回收等;③熟悉类加载机制,了解类加载器的工作原理;④学会使用JVM调优工具,掌握常用调优参数,提升应用程序性能。 其他说明:本文档内容详尽,适合用作面试准备材料和技术学习资料,有助于提高开发人员对JVM的理解和应用能力。
Android项目原生java语言课程设计,包含LW+ppt
戴德梁行&中国房地产协会:2021亚洲房地产投资信托基金研究报告
Android项目原生java语言课程设计,包含LW+ppt
Thinkphp6.0+vue个人虚拟物品发卡网站源码 支持码支付对接 扫码自动发货 源码一共包含两个部分thinkphp6.0后端文件,以及vue前端文件.zip
《基于YOLOv8的食品冷链运输车厢门未锁闭预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。