博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android手机之间tcp通信,Android 设备间通信方式
阅读量:6830 次
发布时间:2019-06-26

本文共 2754 字,大约阅读时间需要 9 分钟。

通过NSD_SERVICE连接

其中一台设备作为服务端,需要向NSD_SERVICE注册服务,另一台设备作为客户端,通过NSD_SERVICE搜索服务,连接服务,连接之后就可以通过Socket通信了。

向NSD_SERVICE注册服务:

NsdServiceInfo serviceInfo = new NsdServiceInfo();

serviceInfo.setServiceName("NsdChat");

serviceInfo.setServiceType("_http._tcp.");

serviceInfo.setPort(SERVER_PORT);

nsdManager.registerService(

serviceInfo, NsdManager.PROTOCOL_DNS_SD, new NsdManager.RegistrationListener() {

@Override

public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {

Log.e(TAG, "nsdRegist onRegistrationFailed: " + errorCode);

}

@Override

public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {

Log.e(TAG, "nsdRegist onUnregistrationFailed: " + errorCode);

}

@Override

public void onServiceRegistered(NsdServiceInfo serviceInfo) {

Log.d(TAG, "nsdRegist onServiceRegistered");

}

@Override

public void onServiceUnregistered(NsdServiceInfo serviceInfo) {

Log.d(TAG, "nsdRegist onServiceUnregistered");

}

});

serviceType 用于客户端搜索时的检索条件

SERVER_PORT为端口号,客户端能获取到,服务端Socket也是监听这个端口(这段代码就不贴了)

客户端代码

搜索设备

nsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, new NsdManager.DiscoveryListener() {

@Override

public void onStartDiscoveryFailed(String serviceType, int errorCode) {

Log.e(TAG, "discoverNsdService onStartDiscoveryFailed " + errorCode);

}

@Override

public void onStopDiscoveryFailed(String serviceType, int errorCode) {

Log.e(TAG, "discoverNsdService onStopDiscoveryFailed " + errorCode);

}

@Override

public void onDiscoveryStarted(String serviceType) {

Log.d(TAG, "discoverNsdService onDiscoveryStarted");

}

@Override

public void onDiscoveryStopped(String serviceType) {

Log.d(TAG, "discoverNsdService onDiscoveryStopped");

}

@Override

public void onServiceFound(NsdServiceInfo serviceInfo) {

Log.d(TAG, "discoverNsdService onServiceFound");

resolveService(serviceInfo);

}

@Override

public void onServiceLost(NsdServiceInfo serviceInfo) {

Log.d(TAG, "discoverNsdService onServiceLost");

}

});

连接设备

nsdManager.resolveService(serviceInfo, new NsdManager.ResolveListener() {

@Override

public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {

Log.e(TAG, "resolveService onResolveFailed " + errorCode);

}

@Override

public void onServiceResolved(NsdServiceInfo serviceInfo) {

Log.d(TAG, "resolveService onServiceResolved");

sendSocketNsd(serviceInfo);

}

});

发送Socket信息

try {

Socket socket = new Socket(serviceInfo.getHost(), serviceInfo.getPort());

DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());

DataInputStream inputStream = new DataInputStream(socket.getInputStream());

outputStream.writeUTF("from haha usb oo ");

String str = inputStream.readUTF();

Log.d(TAG, "socket receive: " + str);

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

转载地址:http://gujkl.baihongyu.com/

你可能感兴趣的文章
[CareerCup] 8.2 Call Center 电话中心
查看>>
GestureDetector和SimpleOnGestureListener的使用教程
查看>>
【FFmpeg】Windows下FFmpeg编译
查看>>
sqlserver字段类型详解
查看>>
Java多线程16:线程组
查看>>
ubuntu wireshark找不到网卡及开启IP转发
查看>>
波音公司开发最轻金属 99.99%是空气
查看>>
Python执行效率测试模块timei的使用方法与与常用Python用法的效率比较
查看>>
Hive架构及Hive On Spark
查看>>
TextureView+SurfaceTexture+OpenGL ES来播放视频(二)
查看>>
浏览器请求中文乱码(ISO-8859-1 to UTF-8)
查看>>
VC6工程升级VS2013遇到的问题
查看>>
[Redux] Implementing Store from Scratch
查看>>
模糊集合和隶属度函数--AForge.NET框架的使用(一)
查看>>
adadmin: error while loading shared libraries: libclntsh.so.10.1
查看>>
js基础篇——encodeURI 和encodeURIComponent
查看>>
模式匹配KMP算法
查看>>
《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制
查看>>
学习 easyui 之一:easyloader 分析与使用
查看>>
大页内存(HugePages)
查看>>