admin管理员组文章数量:1637933
- 在onClick事件中编写UDP通讯程序包括发送和接收功能,注册事件监听器
public class udpActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_udp);
button=findViewById(R.id.button);
setListener();//注册监听器
Log.v("test1","start");
}
private void setListener(){
udpActivity.OnClick onClick = new udpActivity.OnClick();
//对每一个按钮进行setOnClickListener
button.setOnClickListener(onClick);}
private class OnClick implements View.OnClickListener{
@Override
public void onClick(View v) {
new Thread(new Runnable(){
@Override
public void run() {
Log.v("test1","start");
// 1.定义服务器的地址、端口号、数据
DatagramSocket socket=null;
try {
Log.v("test1","debug");
InetAddress address = InetAddress.getByName("10.0.2.2");
Log.v("test1","debug2");
int port=1024;
byte[] data ="abcdefg" .getBytes();
Log.v("test1",address.toString());
//创建数据报,包含发送的数据信息
DatagramPacket packet=new DatagramPacket(data,data.length,address,port);
Log.v("test1","debug3");
//创建DatagramSocket对象
int ports=4567;
socket=new DatagramSocket(ports);
Log.v("test1","debug4");
//向服务器端发送数据报
socket.send(packet);
Log.v("test1","debug5");
/*
*接受服务器端响应的数据
*/
//创建数据报,用于接收服务器端响应的数据
byte[] data2=new byte[1024];
DatagramPacket packet2=new DatagramPacket(data2,data2.length);
//接收服务器响应的数据
socket.receive(packet2);
//读取数据
String reply=new String(data2,0,packet2.getLength());
Log.v("test1","我是客户端,服务器说:" +reply);
//关闭资源
} catch (Exception e) {e.printStackTrace();
} finally {
socket.close();
Log.v("test1","end");
} }
}).start();
}
}
}
-
如上所示,安卓4.0以上版本,主线程中不能运行网络连接程序,建议写法启动一条子线程执行任务。
-
在AndroidManifest.xml中添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 此时可以实现udp数据发送到PC端,但是无法接收PC端数据,注意安卓虚拟机访问本机地址IP为10.0.2.2而不是127.0.0.1,故应将信息发送到地址10.0.2.2,此时本机PC端可以得到信息。
https://blog.csdn/qq_22705681/article/details/85991602
https://blog.csdn/zengmingen/article/details/53783037
- 虚拟机接收数据需要先进行端口映射,打开windows的telnet服务
在控制台中输入telnet localhost 5554,其中5554位虚拟机端口,进入android console
执行redir add udp:4567:4567
其中,第一个端口号是PC的端口,第二个端口号是模拟器端口。(端口映射)
如上图所示,在执行该命令前需先输入 auth命令 在第四行所给出的路径中找到auth_token并按格式输入。
6. 此时PC端软件向127.0.0.1的4567端口发送信息,安卓虚拟机可以的得到相应信息,注意设置数据发送和接收格式。
版权声明:本文标题:安卓虚拟机与PC端UDP的实现 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729264467a1193094.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论