Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过Wifi P2P将多个客户端连接到一台主机_Java_Android_Wifi Direct_Wifip2p - Fatal编程技术网

Java 如何通过Wifi P2P将多个客户端连接到一台主机

Java 如何通过Wifi P2P将多个客户端连接到一台主机,java,android,wifi-direct,wifip2p,Java,Android,Wifi Direct,Wifip2p,我正在尝试创建一个WiFiP2P来与两部android手机和一部Raspberry Pi进行通信。我想要一部手机作为主机,第二部手机+Raspberry Pi作为客户端 直到知道我可以创建一个测试应用程序,通过Wifi直接连接两部手机(测试成功)。我在Youtube上关注一个很棒的教程。不幸的是,本教程只演示了如何将一台主机与一台客户机连接,而不是多台客户机连接。 我试图跟随Android开发者,但我没有足够的经验去理解一切。 我希望你们能帮助我理解我必须在代码中修改什么,并解释为什么 下面的代

我正在尝试创建一个WiFiP2P来与两部android手机和一部Raspberry Pi进行通信。我想要一部手机作为主机,第二部手机+Raspberry Pi作为客户端

直到知道我可以创建一个测试应用程序,通过Wifi直接连接两部手机(测试成功)。我在Youtube上关注一个很棒的教程。不幸的是,本教程只演示了如何将一台主机与一台客户机连接,而不是多台客户机连接。 我试图跟随Android开发者,但我没有足够的经验去理解一切。 我希望你们能帮助我理解我必须在代码中修改什么,并解释为什么

下面的代码与前面提到的教程完全相同

以下是我的主要活动:

package com.example.wifip2p;
导入android.Manifest;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.IntentFilter;
导入android.content.pm.PackageManager;
导入android.net.wifi.WifiManager;
导入android.net.wifi.p2p.WifiP2pConfig;
导入android.net.wifi.p2p.wifip2p设备;
导入android.net.wifi.p2p.WifiP2pDeviceList;
导入android.net.wifi.p2p.WifiP2pGroup;
导入android.net.wifi.p2p.WifiP2pInfo;
导入android.net.wifi.p2p.WifiP2pManager;
导入android.os.Handler;
导入android.os.Message;
导入android.os.StrictMode;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.net.InetAddress;
导入java.net.InetSocketAddress;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.util.ArrayList;
导入java.util.List;
公共类MainActivity扩展了AppCompatActivity{
按钮btnOnOff、btnDiscover、btnSend;
列表视图列表视图;
文本视图读取消息框,连接状态;
编辑文本写入;
WifiManager WifiManager;
WifiP2pManager-mManager;
WifiP2pManager.Channel mcchannel;
广播接收机;
IntentFilter-minentfilter;
List peers=new ArrayList();
字符串[]deviceNameArray;
wifip2p设备[]设备阵列;
静态最终int消息_READ=1;
服务器类服务器类;
ClientClass ClientClass;
发送接收发送接收;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
if(ContextCompat.checkSelfPermission(这个,Manifest.permission.ACCESS\u位置)
!=PackageManager.权限(已授予){
//未授予许可
ActivityCompat.requestPermissions(此,
新字符串[]{Manifest.permission.ACCESS\u\u LOCATION},
1);
}
初始工作();
exqListener();
}
Handler=newhandler(newhandler.Callback(){
@凌驾
公共布尔句柄消息(消息消息消息){
开关(msg.what){
案例信息如下:
字节[]readBuff=(字节[])msg.obj;
String tempMsg=新字符串(readBuff,0,msg.arg1);
read_msg_box.setText(tempMsg);
打破
}
返回true;
}
});
私有void exqListener(){
btnOnOff.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(wifiManager.isWifiEnabled()){
wifiManager.setWifiEnabled(false);
btnOnOff.setText(“开”);
if(mManager!=null){
mManager.removeGroup(mChannel,null);
}
}否则{
wifiManager.setWifiEnabled(true);
btnOnOff.setText(“OFF”);
}
}
});
btnDiscover.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mManager.discoverPeers(mcchannel,新的WifiP2pManager.ActionListener(){
@凌驾
成功时的公共无效(){
connectionStatus.setText(“发现启动”);
}
@凌驾
公共失效失效失效(内部原因){
connectionStatus.setText(“发现启动失败”);
}
});
}
});
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图视图、int i、long l){
最终WIFIP2P设备=设备阵列[i];
WifiP2pConfig config=新的WifiP2pConfig();
config.deviceAddress=device.deviceAddress;
连接(mChannel,config,新的WifiP2pManager.ActionListener(){
@凌驾
成功时的公共无效(){
Toast.makeText(getApplicationContext(),“连接到”+device.deviceName,Toast.LENGTH\u LONG.show();
}
@凌驾
公共失效失效失效(内部原因){
Toast.makeText(getApplicationContext(),“未连接”,Toast.LENGTH\u SHORT.show();
}
});
}
});
btnSe