最近做了个项目,里面用了socket来通信,今天总结下。Socket服务端设备需提供热点供客户端所在设备连接。
先讲服务端:
因为需要服务端提供热点,所以我们先要去打开热点并配置,方法如下:
public static boolean setWifiApEnabled(boolean enable,String wifiName,String passWord){
WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if(enabled){
//wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
wifiManager.setWifiEnabled(false);
}
try{
WifiConfiguration apConfig = new WifiConfiguration();
//热点名称
apConfig .SSID = wifiName;
//热点密码
apConfig.preSharedKey = passWord;
Method method = wifiManager.getClass().getMethod(“setWifiApEnabled”,WifiConfiguration.class,Boolean.TYPE);
return (Boolean)method.invoke(wifiManager,apConfig,enabled);
}catch(Exception e){
return false;
}
}
热点配置完后,服务端需要提供端口,等待客户端连接,因为网络操作不能直接写在主线程里,所以需要开一个线程去执行:
new Thread(){
@Override
public void run(){
super.run();
try{
//服务端提供端口号
ServerSocket serverSocket = new ServerSocket(7240);
while(true){
//等待连接
Socket mSocket = serverSocket.accept();
new Thread(new socketTask(mSocket)).start();
}
}catch(IOException e){
e.printStackTrace();
}
}