Android封装的HTTP请求组件
16lz
2022-03-18
packageandroid.core.service;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.InetSocketAddress;importjava.net.Socket;importjava.net.SocketAddress;importjava.net.UnknownHostException;/***Socket连接操作类**@authorEsa*/publicclassTCPSocketFactory{privateSocketmSocket;//socket连接对象privateDataOutputStreamout;privateDataInputStreamin;//输入流privatebyte[]buffer=newbyte[1024*1];//缓冲区字节数组,信息不能大于此缓冲区privatebyte[]tmpBuffer;//临时缓冲区privateTCPSocketCallbackcallback;//信息回调接口privateinttimeOut=1000*30;/***构造方法传入信息回调接口对象**@paramsdi*回调接口*/publicTCPSocketFactory(TCPSocketCallbackcallback){this.callback=callback;}/***连接网络服务器**@throwsUnknownHostException*@throwsIOException*/publicvoidconnect(Stringip,intport)throwsException{mSocket=newSocket();SocketAddressaddress=newInetSocketAddress(ip,port);mSocket.connect(address,timeOut);//连接指定IP和端口if(isConnected()){out=newDataOutputStream(mSocket.getOutputStream());//获取网络输出流in=newDataInputStream(mSocket.getInputStream());//获取网络输入流if(isConnected()){callback.tcp_connected();}}}publicvoidsetTimeOut(inttimeOut){this.timeOut=timeOut;}/***返回连接服是否成功**@return*/publicbooleanisConnected(){if(mSocket==null||mSocket.isClosed()){returnfalse;}returnmSocket.isConnected();}/***发送数据**@parambuffer*信息字节数据*@throwsIOException*/publicvoidwrite(byte[]buffer)throwsIOException{if(out!=null){out.write(buffer);out.flush();}}/***断开连接**@throwsIOException*/publicvoiddisconnect(){try{if(mSocket!=null){if(!mSocket.isInputShutdown()){mSocket.shutdownInput();}if(!mSocket.isOutputShutdown()){mSocket.shutdownOutput();}}if(out!=null){out.close();}if(in!=null){in.close();}if(mSocket!=null&&!mSocket.isClosed()){//判断socket不为空并且是连接状态mSocket.close();//关闭socket}}catch(Exceptione){e.printStackTrace();}finally{callback.tcp_disconnect();out=null;in=null;mSocket=null;//制空socket对象}}/***读取网络数据**@throwsIOException*/publicvoidread()throwsIOException{if(in!=null){intlen=0;//读取长度while((len=in.read(buffer))>0){tmpBuffer=newbyte[len];//创建临时缓冲区System.arraycopy(buffer,0,tmpBuffer,0,len);//将数据拷贝到临时缓冲区callback.tcp_receive(tmpBuffer);//调用回调接口传入得到的数据tmpBuffer=null;}}}}
更多相关文章
- Android中XML格式数据的简单使用
- Android(安卓)数据库操作
- 关于android Http访问,上传,用了三个方法
- android 本地存储数据
- android操作通讯录的联系人
- Android中SQLite增删改查的方法(Android开发视频讲座)
- android 通过ContentResolver获得联系人数据
- Android(安卓)Ble连接,Ble133异常处理,写入消息
- mybatisplus的坑 insert标签insert into select无参数问题的解决