1、android socket 编程实例 android 客户端通过 socket 与服务器进行通信可以分为以下几步:应用程序与服务器通信可以采用两种模式:TCP 可靠通信 和 UDP 不可靠通信。(1)通过 IP 地址和端口实例化 Socket,请求连接服务器:socket = new Socket(HOST, PORT); /host:为服务器的 IP 地址 port:为服务器的端口号(2)获取 Socket 流以进行读写,并把流包装进 BufferWriter 或者PrintWriter:PrintWriter out = new PrintWriter( new BufferedWrit
2、er( new OutputStreamWriter(socket.getOutputStream(),true); 这里涉及了三个类:socket.getOutputStream 得到 socket 的输出字节流,OutputStreamWriter 是字节流向字符流转换的桥梁,BufferWriter 是字符流,然后再包装进 PrintWriter。(3)对 Socket 进行读写if (socket.isConnected() if (!socket.isOutputShutdown() out.println(msg);(4)关闭打开的流out.close();在写代码的过程中一定要注
3、意对 socket 输入流 输出流的关闭下面是一个简单的例子:main.xmlhtml view plaincopy1. 2. 6. 11. 15. 16. 21. 22. 下面是 android 客户端的源代码:java view plaincopy1. package com.android.SocketDemo; 2. 3. import java.io.BufferedReader; 4. import java.io.BufferedWriter; 5. import java.io.IOException; 6. import java.io.InputStreamReader;
4、7. import java.io.OutputStreamWriter; 8. import java.io.PrintWriter; 9. import .Socket; 10. 11. import android.app.Activity; 12. import android.app.AlertDialog; 13. import android.content.DialogInterface; 14. import android.os.Bundle; 15. import android.os.Handler; 16. import android.os.Message; 17.
5、 import android.view.View; 18. import android.widget.Button; 19. import android.widget.EditText; 20. import android.widget.TextView; 21. 22. public class SocketDemo extends Activity implements Runnable 23. private TextView tv_msg = null; 24. private EditText ed_msg = null; 25. private Button btn_sen
6、d = null; 26. / private Button btn_login = null; 27. private static final String HOST = “192.168.1.223“; 28. private static final int PORT = 9999; 29. private Socket socket = null; 30. private BufferedReader in = null; 31. private PrintWriter out = null; 32. private String content = “; 33. 34. /* Ca
7、lled when the activity is first created. */35. Override 36. public void onCreate(Bundle savedInstanceState) 37. super.onCreate(savedInstanceState); 38. setContentView(R.layout.main); 39. 40. tv_msg = (TextView) findViewById(R.id.TextView); 41. ed_msg = (EditText) findViewById(R.id.EditText01); 42. /
8、 btn_login = (Button) findViewById(R.id.Button01); 43. btn_send = (Button) findViewById(R.id.Button02); 44. 45. try 46. socket = new Socket(HOST, PORT); 47. in = new BufferedReader(new InputStreamReader(socket.getInputStream(); 48. out = new PrintWriter(new BufferedWriter(new OutputStreamWriter( 49.
9、 socket.getOutputStream(), true); 50. catch (IOException ex) 51. ex.printStackTrace(); 52. ShowDialog(“login exception“ + ex.getMessage(); 53. 54. btn_send.setOnClickListener(new Button.OnClickListener() 55. 56. Override 57. public void onClick(View v) 58. / TODO Auto-generated method stub 59. Strin
10、g msg = ed_msg.getText().toString(); 60. if (socket.isConnected() 61. if (!socket.isOutputShutdown() 62. out.println(msg); 63. 64. 65. 66. ); 67. new Thread(SocketDemo.this).start(); 68. 69. 70. public void ShowDialog(String msg) 71. new AlertDialog.Builder(this).setTitle(“notification“).setMessage(
11、msg) 72. .setPositiveButton(“ok“, new DialogInterface.OnClickListener() 73. 74. Override 75. public void onClick(DialogInterface dialog, int which) 76. / TODO Auto-generated method stub 77. 78. 79. ).show(); 80. 81. 82. public void run() 83. try 84. while (true) 85. if (socket.isConnected() 86. if (
12、!socket.isInputShutdown() 87. if (content = in.readLine()!= null) 88. content += “n“; 89. mHandler.sendMessage(mHandler.obtainMessage(); 90. else 91. 92. 93. 94. 95. 96. catch (Exception e) 97. e.printStackTrace(); 98. 99. 100. 101. public Handler mHandler = new Handler() 102. public void handleMess
13、age(Message msg) 103. super.handleMessage(msg); 104. tv_msg.setText(tv_msg.getText().toString() + content); 105. 106. ; 107. 下面是服务器端得 java 代码:java view plaincopy1. import java.io.BufferedReader; 2. import java.io.BufferedWriter; 3. import java.io.IOException; 4. import java.io.InputStreamReader; 5.
14、import java.io.OutputStreamWriter; 6. import java.io.PrintWriter; 7. import .ServerSocket; 8. import .Socket; 9. import java.util.ArrayList; 10. import java.util.List; 11. import java.util.concurrent.ExecutorService; 12. import java.util.concurrent.Executors; 13. 14. 15. public class Main 16. privat
15、e static final int PORT = 9999; 17. private List mList = new ArrayList(); 18. private ServerSocket server = null; 19. private ExecutorService mExecutorService = null; /thread pool 20. 21. public static void main(String args) 22. new Main(); 23. 24. public Main() 25. try 26. server = new ServerSocket
16、(PORT); 27. mExecutorService = Executors.newCachedThreadPool(); /create a thread pool 28. System.out.print(“server start .“); 29. Socket client = null; 30. while(true) 31. client = server.accept(); 32. mList.add(client); 33. mExecutorService.execute(new Service(client); /start a new thread to handle
17、 the connection 34. 35. catch (Exception e) 36. e.printStackTrace(); 37. 38. 39. class Service implements Runnable 40. private Socket socket; 41. private BufferedReader in = null; 42. private String msg = “; 43. 44. public Service(Socket socket) 45. this.socket = socket; 46. try 47. in = new Buffere
18、dReader(new InputStreamReader(socket.getInputStream(); 48. msg = “user“ +this.socket.getInetAddress() + “come toal:“ 49. +mList.size(); 50. this.sendmsg(); 51. catch (IOException e) 52. e.printStackTrace(); 53. 54. 55. 56. 57. Override 58. public void run() 59. / TODO Auto-generated method stub 60.
19、try 61. while(true) 62. if(msg = in.readLine()!= null) 63. if(msg.equals(“exit“) 64. System.out.println(“ssssssss“); 65. mList.remove(socket);66. in.close(); 67. msg = “user:“ + socket.getInetAddress() 68. + “exit total:“ +mList.size(); 69. socket.close(); 70. this.sendmsg(); 71. break; 72. else 73.
20、 msg = socket.getInetAddress() + “:“ + msg; 74. this.sendmsg(); 75. 76. 77. 78. catch (Exception e) 79. e.printStackTrace(); 80. 81. 82. 83. public void sendmsg() 84. System.out.println(msg); 85. int num =mList.size(); 86. for (int index = 0; index num; index+) 87. Socket mSocket = mList.get(index);88. PrintWriter pout = null; 89. try 90. pout = new PrintWriter(new BufferedWriter( 91. new OutputStreamWriter(mSocket.getOutputStream(),true); 92. pout.println(msg); 93. catch (IOException e) 94. e.printStackTrace(); 95. 96. 97. 98. 99.