1. android开发P2P聊天是怎么实现的呢跟有服务器的Socket连接有什么分别吗
等答案!
Android4.0开始只是Wifip2p了,可以利用这个来做一个P2P聊天。
2. 如何在Android系统下开发一个基于WiFi的P2P聊天软件
1JDK下载地址JDK(javaDevelopmentKit)是整个Java的核心,包括一系列Java开发的东西,安装完毕需要配置一下环境变量。2JAVA_HOMEJDK的安装路径,这个环境变量本身不存在,需要创建,创建完则可以利用%JAVA_HOME%作为统一引用路径,其值为:jdk在你电脑上的安装路径。3PATHPATH属性已存在,可直接编辑。作用是用于配置路径,简化命令的输入,其值为:%JAVA_HOME%\bin。4CLASSPATH用于编译时JAVA类的路径,注意这里设置的是两个值,(.;)表示的是JVM先搜索当前目录。其值为:.;%JAVA_HOME%\lib\tools.jar。5配置完毕后,通过cmd运行以下命令:java-version,javac如果出现返回信息,则设置成功。
3. android 视频 p2p
p2p可能不能实现实时播放。因为p2p是分段传输的,有可能你传输了尾部的一段视频,前面的视频段还没穿,造成播放卡顿。
要是实时传输,还是两台电脑之间通过udp协议直接传的好。
或者给p2p加上限制,视频段必须按顺序传播。
说实话我不太看得懂你的意思。
如果你说的是获取别人手机上的视频并边下载边播放的话,那么udp协议传输文件即可。
如果你说的是获取别人正在录制的视频并播放的话,那么有点类似视频通话,两个端口同步传输图像和文件,还是用udp协议。
所以我不知道你为什么要纠结于p2p?
4. Android p2p简单实现
p2p 技术,可以让具备相应硬件的 Android 4.0(API 级别 14) 或更高版本设备在没有中间接入点的情况下,通过 wlan 进行直接互联。使用这些 api ,您可以实现支持 wlan p2p 的设备间相互发现和连接,从而获得比蓝牙连接更远距离的高速连接通信效果。对于多人游戏或照片共享等需要在用户之间共享数据的应用而言,这一技术非常有用。
一个设备上可以有多个 p2p 服务存在,通过 addLocalService 可以在设备上发布自己的 p2p 服务,通过 removeLocalService 可以移除自己的 p2p 服务
serviceName 是服务的名字,可以自定义,这里设置为 DON_TEST
serviceType 是服务类型,格式为 _<protocol>._<transportlayer> ,表示协议+传输类型。
例如:
p2p 设备信息及连接状态的变化,需要通过监听系统广播来实现,常用到的广播有以下几个:
通过方法 discoverPeers 可搜索设备周围的p2p设备
discoverPeers 会触发广播 WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION ,收到此广播后,通过方法 requestPeers 可获取周边 p2p 设备列表
通过 一、服务发布 ,发布了一个名为 DON_TEST 的服务,通过 discoverServices 方法就可以搜索到这个服务,同时需要通过 setDnsSdResponseListeners 方法设置监听 WifiP2pManager.DnsSdServiceResponseListener 和 WifiP2pManager.DnsSdTxtRecordListener ,在搜索过程中这两个监听会回调搜索到的服务信息。
WifiP2pManager.DnsSdServiceResponseListener 用于监听搜索到的服务信息
WifiP2pManager.DnsSdTxtRecordListener 用于获取服务发布携带的额外信息,例如 一、服务发布 中的携带的信息 port 8888
通过 WifiP2pManager.DnsSdServiceResponseListener 可以搜索到可用的服务信息,通过方法 onDnsSdServiceAvailable 中的参数 WifiP2pDevice 可获取到服务所在的设备信息,通过 connect 方法可以连接该设备
connect 调用成功之后,如果是首次连接,对端手机会显示一个弹窗,用户选择允许连接之后,两部手机手机才能建立连接。
建立连接之后,系统会发送广播 WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION ,收到这个广播之后,可通过 requestConnectionInfo 方法获取连接信息 WifiP2pInfo ,通过 WifiP2pInfo 可获取对方的 ip
连接到了一起,此时系统会自动创建一个群组 (Group) 并随机指定一台设备为群主 (GroupOwner) 。此时,对于两台设备来说,群主的 IP 地址是可知的(系统回调函数中有提供),但客户端的 IP 地址需要再来通过其他方法来主动获取。
可以通过创建群组,指定某台设备作为服务器端(群主),即指定某台设备用来接收文件,因此,服务器端要主动创建群组,并等待客户端的连接。
server端
客户端
在两部手机通过 p2p 连接之后,客户端传输文件到服务端
参考:
https://developer.android.google.cn/guide/topics/connectivity/wifip2p#java
https://blog.csdn.net/weixin_33735676/article/details/87990760
5. 如何在Android系统下开发一个基于WiFi的P2P聊天软件
前一阵同学接了美国的一个外包,就是做这个玩意儿的,基于WiFi Direct的,其中包含视频语音通话,最多支持连接八个终端.
说实话,这块的参考资料确实比较少,当然如果仅仅是P2P聊天的话,没那么难,有一定的java功底,看看Android API基本上可破.
6. Android开发P2P聊天是怎么实现的
1、注册用户((Openfire服务器),已搭建好服务器。
2、好友添加(不用分组,在聊天界面直接显示添加的好友)
3、P2P聊天(文字功能)
4、保存查看聊天记录:用户可查看与好友的聊天记录信息
5、好友上下线自动刷新各自头像列表,点击头像进入聊天界面
6、demo要支持android手机、7寸平板和10平板.
7. android wifip2p怎么用
为了使用Wi-Fi P2P,要在你的清单文件中添加 CHANGE_WIFI_STATE 、 ACCESS_WIFI_STATE 、和 INTERNET 权限。即使Wi-FiP2P不要求互联网连接,但它要使用标准的Java套接字,并且Android在使用这些套接字时要求申请这些权限,因此要在清单中申请INTERNET权限。
<manifestxmlns:android="http //schemas android com/apk/res/android" package="com.example.android.nsdchat"
...
<uses-permission
android:required="true"
android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission
android:required="true"
android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission
android:required="true"
android:name="android.permission.INTERNET"/>
...
添加本地服务
如果你要提供一个本地服务,那么就需要把这个服务注册为可发现的。本地服务被注册后,框架就会自动的响应来自对等点的服务发现请求。
以下是创建本地服务的步骤:
1. 创建一个 WifiP2pServiceInfo 对象;
2. 填入你的服务相关的信息;
3. 调用addLocalService()方法来注册本地服务,让其可发现。
private void startRegistration () { // Create a string map containing information about your service.
Map record = new HashMap();
record.put("listenport", String.valueOf(SERVER_PORT));
record.put("buddyname", "John Doe" + (int) (Math.random() * 1000));
record.put("available", "visible");
// Serviceinformation. Pass it an instance name, service type
//_protocol._transportlayer , and the map containing
//information other devices will want once they connect to this one.
WifiP2pDnsSdServiceInfo serviceInfo =
WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);
// Add thelocal service, sending the service info, network channel,
// andlistener that will be used to indicate success or failure of
// therequest.
mManager.addLocalService(channel, serviceInfo, new ActionListener() {
@Override
public void onSuccess() {
// Command successful! Code isn't necessarily needed here,
// Unless you want to update the UI or add logging statements.
}
@Override
public void onFailure(int arg0) {
// Command failed. Check for P2P_UNSUPPORTED, ERROR, or BUSY
}
});
}
发现附近的服务
Android使用回调方法来通知你的应用程序可用的服务,因此首先要做的就是要建立回调方法。创建一个 WifiP2pManager.DnsSdTxtRecordListener 对象来监听传入的记录。这个记录可以是其他设备的任意广播。当一个记录进入时,你可以把设备地址和其他你想要的其他相关信息复制到当前方法外部的数据结构中,以便后续可以访问它。下面的例子假设记录中包含一个“buddyname”字段,它带有用户的标识。
final HashMap < String , String > buddies = new HashMap < String , String >(); ...
private void discoverService() {
DnsSdTxtRecordListener txtListener = new DnsSdTxtRecordListener() {
@Override
/* Callbackincludes:
* fullDomain: full domainname: e.g "printer._ipp._tcp.local."
* record: TXT record dta as amap of key/value pairs.
* device: The device runningthe advertised service.
*/
public voidonDnsSdTxtRecordAvailable(
String fullDomain, Map record, WifiP2pDevice device) {
Log.d(TAG, "DnsSdTxtRecord available -" + record.toString());
buddies.put(device.deviceAddress, record.get("buddyname"));
}
};
...
}
实现一个 WifiP2pManager.DnsSdServiceResponseListener 接口,来获取服务信息。这个接口会接收实际的描述和连接信息。上面的代码中使用了 Map 对象把设备地址和用户标识组成一对。服务响应监听器使用这个接口把DNS记录和对应的服务信息连接到一起。实现上述两个监听器后,使用 setDnsSdResponseListener() 方法把它们添加给 WifiP2pManager 对象。
private void discoverService () { ...
DnsSdServiceResponseListener servListener = new DnsSdServiceResponseListener() {
@Override
public voidonDnsSdServiceAvailable(String instanceName, String registrationType,
WifiP2pDevice resourceType) {
// Update the device name with the human-friendly version from
// the DnsTxtRecord, assuming one arrived.
resourceType.deviceName = buddies
.containsKey(resourceType.deviceAddress) ? buddies
.get(resourceType.deviceAddress) : resourceType.deviceName;
// Add to the custom adapter defined specifically for showing
// wifi devices.
WiFiDirectServicesList fragment = (WiFiDirectServicesList)getFragmentManager()
.findFragmentById(R.id.frag_peerlist);
WiFiDevicesAdapter adapter = ((WiFiDevicesAdapter)fragment
.getListAdapter());
adapter.add(resourceType);
adapter.notifyDataSetChanged();
Log.d(TAG, "onBonjourServiceAvailable " + instanceName);
}
};
mManager.setDnsSdResponseListeners(channel, servListener, txtListener);
...
}
现在创建一个服务请求并调用 addServiceRequest() 方法,这个方法也需要一个监听器来包括成功或失败。
serviceRequest = WifiP2pDnsSdServiceRequest . newInstance (); mManager .addServiceRequest(channel,
serviceRequest,
new ActionListener() {
@Override
public void onSuccess() {
// Success!
}
@Override
public void onFailure(int code) {
// Command failed. Check forP2P_UNSUPPORTED, ERROR, or BUSY
}
});
最后,调用的 discoverServices() 方法。
mManager . discoverServices ( channel , new ActionListener () { @Override
public void onSuccess() {
// Success!
}
@Override
public void onFailure(int code) {
// Command failed. Check for P2P_UNSUPPORTED, ERROR, or BUSY
if (code == WifiP2pManager.P2P_UNSUPPORTED) {
Log.d(TAG, "P2P isn'tsupported on this device.");
else if(...)
...
}
});
如果一切顺利,恭喜你大功告成。如果遇到问题,记住前面异步调用的参数 WifiP2pManager.ActionListener 参数,它提供了指示成功或失败的回调方法。把调试断点设置在 onFailure() 方法中来诊断问题。这个方法提供了错误代码,以下是可能发生的错误:
P2P_UNSUPPORTED
运行 app 的设备上不支持 Wi-Fi P2P
BUSY
系统忙于处理请求
ERROR
由于内部错误导致操作失败
8. 如何在Android系统下开发一个基于WiFi的P2P聊天软件
主要是客户端连接服务器端,如果一对一就两个相连,多对多的话可能需要搭一个服务器处理
其实这个网络上已经很多相关例程,可以网络搜索下,推荐csdn或者pudn去看一下,内容挺详细的。
9. p2p安卓版怎么用
一、下载并安装p2p种子搜索器。
安卓版下载地址:http://www.vipcn.com/shoujiruanjian/shoujiyingyong/192100.html
IOS版下载地址:http://www.vipcn.com/shoujiruanjian/shoujiyingyong/19.html
二、安装后开始使用本软件。
1、进入主界面即可看到“软件”项目里包含网络云、手机迅雷、迅雷影音等常用云点播工具。
2、进入搜索界面,搜索后,即可显示文件大小、格式信息。
3、选择搜索到的种子进入详情页面,“拷贝”选项支持将链接地址拷贝到剪贴板;“播放”选项支持云点播
4、点击云播放即显示下面的示意图,欢迎体验。
10. 如何在Android上实现P2P文件共享系统
通过对数据库的索引,我们还为您准备了:
Android P2P 如何实现?
问:请教大虾们:两台gphone间(由程序控制)交流,除了透过短信外,是否有...
答:谢谢各位大虾的帮助。我买了两本介绍android的书都没有看到socket,所以发贴求助。知道可以用socket太好了。谢谢!
===========================================
基于java的p2p实现文件共享和传输
问:我想学学p2p,本人学.NET的,可是始终都没头绪,希望哪位大虾能给个完整...
答:C++ Socket网络编程大全 1.简单服务器 //#include //#pragma comment(lib,"WS2_32.lib") WSADATA sServer,sClient; chat buf[1024]; int retVal; if(WSAStartup(MAKEWORD(2,2),&wsd)!=0) { return -1;//失败 } sServer=socket(AF_INET,SOCK_STRE...
===========================================
p2p文件共享方法或软件
问:我要共享一大堆无版权视频、 、我有两个国外VPS、但是我想用p2p直接把视...
答:直接用BT呢?自己做个种子,然后传给别人
===========================================