前面写了经典蓝牙的工具类,用到了socket,今天写个socket工具类总结一下。
服务端
public class ServerSocketUtil {
private static volatile ServerSocketUtil instance;
private ServerSocketUtil() {}
public static ServerSocketUtil getInstance() {
if (instance == null) {
synchronized (ServerSocketUtil.class) {
if (instance == null) {
instance = new ServerSocketUtil();
}
}
}
return instance;
}
private Context context;
public void init(Application application){
context = application;
}
private ServerSocket serverSocket;
private Disposable disposable;
private Disposable readDisposable;
private List<Socket> socketList;
private InputStream inputStream;
public void close(){
try {
for (Socket socket:socketList){
if (socket != null){
socket.close();
}
}
if (serverSocket != null){
serverSocket.close();
}
if (inputStream != null){
inputStream.close();
}
if (!disposable.isDisposed()){
disposable.dispose();
}
if (!readDisposable.isDisposed()){
readDisposable.dispose();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void serverSocket(int port){
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(ObservableEmitter<Object> emitter) throws Exception {
serverSocket = new ServerSocket(port);
socketList = new ArrayList<>();
while (true){
Socket socket =serverSocket.accept();
if (socket != null){
socketList.add(socket);
//接收信息
serverRead(socket);
}
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {
disposable = d;
}
@Override
public void onNext(Object o) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
public void serverRead(Socket socket){
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter&l