1、该socket联网工具类会导致读取服务端的数据发生阻塞
public class ConnectToServer { private static boolean D=true; private static InputStream mInputStream; private static OutputStream mOutputStream; public ConnectToServer() { // TODO Auto-generated constructor stub } /** * 建立TCP连接 * @param ip 服务端ip * @param port 端口 */ public static Socket conn(String ip,int port){ try { Socket socket=new Socket(InetAddress.getByName(ip), port); if(D){ Log.i("Socket", (socket==null)+""); } return socket; } catch (Exception e) { // TODO: handle exception } return null; } /** * 把数据msg发送到服务端 * @param socket * @param msg 待发送的数据 */ public static void sendReq(Socket socket,byte[] msg){ try { mOutputStream=socket.getOutputStream(); mOutputStream.write(msg); mOutputStream.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 从服务端返回的数据 * @param socket * @return */ public static byte[] recData( Socket socket){ int count = 0; try { mInputStream=socket.getInputStream(); byte[] inDatas = null; while (count == 0) { count = mInputStream.available(); } inDatas = new byte[count]; mInputStream.read(inDatas); return inDatas; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return null; } /** * 关闭连接释放资源 * @param socket */ public static void closeConn(Socket socket){ if(mOutputStream!=null){ try { mOutputStream.close(); mOutputStream=null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(mInputStream!=null){ try { mInputStream.close(); mInputStream=null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(socket!=null){ try { socket.close(); socket=null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
2、在读取服务端数据的时候,如果一段时间后没有读取到数据,则关闭连接释放资源。(本工具类以5秒为例)
public class ConnectToServer { private static boolean D=true; private static InputStream mInputStream; private static OutputStream mOutputStream; public ConnectToServer() { // TODO Auto-generated constructor stub } /** * 建立TCP连接 * @param ip 服务端ip * @param port 端口 */ public static Socket conn(String ip,int port){ try { Socket socket=new Socket(InetAddress.getByName(ip), port); return socket; } catch (Exception e) { Log.i("异常信息", e.toString()); } return null; } /** * 把数据msg发送到服务端 * @param socket * @param msg 待发送的数据 */ public static void sendReq(Socket socket,byte[] msg){ try { mOutputStream=socket.getOutputStream(); mOutputStream.write(msg); mOutputStream.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 从服务端返回的数据 * @param socket * @return */ public static byte[] recData( Socket socket){ int count = 0; try { mInputStream=socket.getInputStream(); byte[] inDatas = null; while (count == 0) { count = mInputStream.available(); try { //5秒后无响应 Thread.sleep(5000); if(mInputStream.available()==0){ //关闭连接释放资源 closeConn(socket); break; } } catch (Exception e) { // TODO: handle exception } if(D){ Log.i("读取服务端数据", mInputStream.available()+""); } } if(count==0){ return null; }else{ inDatas = new byte[count]; mInputStream.read(inDatas); return inDatas; } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return null; } /** * 关闭连接释放资源 * @param socket */ public static void closeConn(Socket socket){ if(mOutputStream!=null){ try { mOutputStream.close(); mOutputStream=null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(mInputStream!=null){ try { mInputStream.close(); mInputStream=null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(socket!=null){ try { socket.close(); socket=null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
时间: 2024-10-11 19:06:12