Android Socket 轻松建立连接和发送消息

  • Post author:
  • Post category:其他


1.建立Socket连接


1) Socket 实现了TCP/IP协议,可以连接到网络上的上脑,并收发数据

2) ServerSocket 用于服务端,可以监听服务端口,等待客户端连接,连接后可以生成用于传输数据的Socket

3) 创建服务端

ServerSocket serverSocket = new ServerSocket(9999);

Socket socket =  serverSocket.accept();  //等待客户端连接

4) 创建客户端

Socket socket = new Socket(“100.100.28.26”, 9999);

// 注意:注册网络权限;不能在主线程做网络连接

5) 客户端发送消息

DataOutputStream writer = new DataOutputStream(socket.getOutputStream());

writer.writeUTF(“嘿嘿,你好啊,服务器..”);  // 写一个UTF-8的信息

6) 服务端接收消息

DataInputStream reader = new DataInputStream( socket.getInputStream());

String msg = reader.readUTF();


7)  服务器等待说明






2.Android客户端、服务端具体实现




1)Android客户端


  1. package


    com.example.socketclient;




  2. import


    java.io.DataOutputStream;



  3. import


    java.io.IOException;



  4. import


    java.net.Socket;



  5. import


    java.net.UnknownHostException;




  6. import


    android.app.Activity;



  7. import


    android.os.Bundle;



  8. import


    android.util.Log;



  9. import


    android.view.View;




  10. /**



  11. * 客户端



  12. *



  13. */





  14. public




    class


    MainActivity


    extends


    Activity {




  15. @Override





  16. protected




    void


    onCreate(Bundle savedInstanceState) {



  17. super


    .onCreate(savedInstanceState);


  18. setContentView(R.layout.activity_main);

  19. }



  20. private


    Socket socket;




  21. /**



  22. * 建立服务端连接



  23. */





  24. public




    void


    conn(View v) {



  25. new


    Thread() {




  26. @Override





  27. public




    void


    run() {




  28. try


    {


  29. socket =

    new


    Socket(


    “100.100.28.26”


    ,


    9999


    );


  30. Log.e(

    “JAVA”


    ,


    “建立连接:”


    + socket);


  31. }

    catch


    (UnknownHostException e) {


  32. e.printStackTrace();

  33. }

    catch


    (IOException e) {


  34. e.printStackTrace();

  35. }

  36. }

  37. }.start();

  38. }



  39. /**



  40. * 发送消息



  41. */





  42. public




    void


    send(View v) {



  43. new


    Thread() {



  44. @Override





  45. public




    void


    run() {




  46. try


    {



  47. // socket.getInputStream()




  48. DataOutputStream writer =

    new


    DataOutputStream(socket.getOutputStream());


  49. writer.writeUTF(

    “嘿嘿,你好啊,服务器..”


    );


    // 写一个UTF-8的信息





  50. System.out.println(

    “发送消息”


    );


  51. }

    catch


    (IOException e) {


  52. e.printStackTrace();

  53. }

  54. }

  55. }.start();

  56. }


  57. }


2)服务端



  1. package


    com.example.socketserver;




  2. import


    java.io.DataInputStream;



  3. import


    java.io.IOException;



  4. import


    java.net.ServerSocket;



  5. import


    java.net.Socket;




  6. /**



  7. * 服务端



  8. *



  9. */





  10. public




    class


    SocketServer{




  11. public




    static




    void


    main(String[] args) {


  12. startService();

  13. }



  14. /**



  15. * 启动服务监听,等待客户端连接



  16. */





  17. private




    static




    void


    startService() {



  18. try


    {



  19. // 创建ServerSocket




  20. ServerSocket serverSocket =

    new


    ServerSocket(


    9999


    );


  21. System.out.println(

    “–开启服务器,监听端口 9999–”


    );




  22. // 监听端口,等待客户端连接





  23. while


    (


    true


    ) {


  24. System.out.println(

    “–等待客户端连接–”


    );


  25. Socket socket = serverSocket.accept();

    //等待客户端连接




  26. System.out.println(

    “得到客户端连接:”


    + socket);



  27. startReader(socket);

  28. }


  29. }

    catch


    (IOException e) {


  30. e.printStackTrace();

  31. }

  32. }



  33. /**



  34. * 从参数的Socket里获取最新的消息



  35. */





  36. private




    static




    void


    startReader(


    final


    Socket socket) {




  37. new


    Thread(){



  38. @Override





  39. public




    void


    run() {


  40. DataInputStream reader;


  41. try


    {



  42. // 获取读取流




  43. reader =

    new


    DataInputStream( socket.getInputStream());



  44. while


    (


    true


    ) {


  45. System.out.println(

    “*等待客户端输入*”


    );



  46. // 读取数据




  47. String msg = reader.readUTF();

  48. System.out.println(

    “获取到客户端的信息:”


    + msg);


  49. }

  50. }

    catch


    (IOException e) {


  51. e.printStackTrace();

  52. }

  53. }

  54. }.start();

  55. }


  56. }





3.下来我们运行Demo来看一看效果