Android Socket通讯基本用法
2016-06-06 08:49
537 查看
Socket可以进行长连接通讯,分为客户端和服务端。
1、客户端
//①定义IP地址及端口号 private final String dstAddress_ecg = "192.168.1.107"; private final int dstPort = 8001; //②打开socket privateSocket mSocket; private OutputStream mOutputStream; //连接socket时,不能直接在UI主线程中,不然会包:android.os.NetworkOnMainThreadException错误 private void initSocket() { try { mSocket = new Socket(dstAddress_ecg, dstPort); // mOutputStream = mSocket.getOutputStream(); } catch (UnknownHostException e) { e.printStackTrace(); Log.e(TAG, "网络异常"); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "网络异常"); } } //③向服务端发送数据 //注意事项:在使用OutputStream.write()后,需要在写入“\r\n”,不然,服务端不会直接得到写入的数据。 private void sendData2Server(final byte[] datas) { new Thread() { public void run() { try { if(mSocket == null || mSocket.isClosed()) { initSocket(); } mOutputStream.write(datas); //发送完一条数据后,需要再写入“\r\n”,否则可能服务端不能实时收到数据。 mOutputStream.write("\r\n".getBytes()); mOutputStream.flush(); } catch (IOException e) { e.printStackTrace(); Log.e(TAG, "e=" + e); closeScoket(); } }; }.start(); } //④关闭Socket连接 private void closeScoket() { try { if(mOutputStream != null) { mOutputStream.close(); } } catch (IOException e1) { e1.printStackTrace(); } finally { mOutputStream = null; } // try { if(mSocket != null) { mSocket.close(); } } catch (IOException e1) { e1.printStackTrace(); } finally { mSocket = null; } } |
2、服务端
public class SocketService { private static final int SOCKET_PORT = 8001; public static ArrayList<Socket> socketList = new ArrayList<Socket>(); ServerSocket serverSocket = null; private void openSocket() { new Thread() { public void run() { try { //打开socket监听端口 serverSocket = new ServerSocket(SOCKET_PORT); // while (true) { // 每当接收到客户端的Socket请求,服务器端也相应的创建一个Socket Socket socket = serverSocket.accept(); socketList.add(socket); // new Thread(new ServerThread(socket)).start(); } } catch (IOException e) { e.printStackTrace(); System.out.println(e); return; } }; }.start(); } class ServerThread implements Runnable { private Socket socket = null; private BufferedReader bufferedReader = null; public ServerThread(Socket socket) throws IOException { this.socket = socket; bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); } @Override public void run() { try { String content = null; while ((content = bufferedReader.readLine()) != null) { System.out.println(content); } } catch (IOException e) { e.printStackTrace(); System.out.println(e); } } } public static void main(String[] args) { final SocketService socketService = new SocketService(); socketService.openSocket(); } } |
相关文章推荐
- android richEditText 可添加文本和图片的记事本功能的控件打造
- [android基础] Gradle,gradlew的使用
- Android基础Layout介绍
- Android Scroller大揭秘
- Android——数据库相关(课堂整理)
- 神奇的Android Studio Template
- Android Service基础
- Android Studio主题设置、颜色背景配置
- Android中ProgressDialog的使用
- Android小游戏开发相关菜鸟级经验及提示<1>图像和音频相关
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
- Android项目的MVP模式
- Android 之内容提供程序(Content Provider)
- Android数据存储方式之——文件存储
- Android 简介及基础知识
- Android 之日历提供程序
- Android自定义带下划线的TextView
- Android 之创建内容提供程序
- Android 之Intent和Intent过滤器
- Android 之Fragment