歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android Socket通信(下)

Android Socket通信(下)

日期:2017/3/1 10:20:53   编辑:Linux編程

在Android Socket通信(上),我們完成了一個模擬器上運行的android socket通信實例程序:http://www.linuxidc.com/Linux/2012-06/61800.htm

今天我們將它移植到真實的android手機上,不過要先確保環境配置正確,請參考上一講

主機的lwan0的ip地址是路由器自動分配的:192.168.1.100,android手機的ip地址是路由器自動分配的:192.168.1.101,可以在主機上ping手機,理論上是通的,不過很奇怪,我經常會碰到ping不通的情況,然後我在android手機裡裝了一個模擬終端,ping主機,一般都是通的,難道是android手機的問題?

下面直接上代碼,和上一講的代碼基本沒有差別,改動的部分如下:

1.

ip地址修改過了

2.

端口由9400改為了9500(呵呵,這是任意的,不改也可以的)

2.

src/RealclientActivity.java

  1. package real.client.com;
  2. import java.io.IOException;
  3. import java.io.PrintStream;
  4. import java.net.Socket;
  5. import java.net.UnknownHostException;
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import android.widget.Toast;
  12. public class RealclientActivity extends Activity
  13. {
  14. /* 服務器地址 */
  15. private final String SERVER_HOST_IP = "192.168.1.100";
  16. /* 服務器端口 */
  17. private final int SERVER_HOST_PORT = 9500;
  18. private Button btnConnect;
  19. private Button btnSend;
  20. private EditText editSend;
  21. private Socket socket;
  22. private PrintStream output;
  23. public void toastText(String message)
  24. {
  25. Toast.makeText(this, message, Toast.LENGTH_LONG).show();
  26. }
  27. public void handleException(Exception e, String prefix)
  28. {
  29. e.printStackTrace();
  30. toastText(prefix + e.toString());
  31. }
  32. /** Called when the activity is first created. */
  33. @Override
  34. public void onCreate(Bundle savedInstanceState)
  35. {
  36. super.onCreate(savedInstanceState);
  37. setContentView(R.layout.main);
  38. initView();
  39. btnConnect.setOnClickListener(new Button.OnClickListener()
  40. {
  41. @Override
  42. public void onClick(View v)
  43. {
  44. initClientSocket();
  45. }
  46. });
  47. btnSend.setOnClickListener(new Button.OnClickListener()
  48. {
  49. @Override
  50. public void onClick(View v)
  51. {
  52. sendMessage(editSend.getText().toString());
  53. }
  54. });
  55. }
  56. public void initView()
  57. {
  58. btnConnect = (Button)findViewById(R.id.btnConnect);
  59. btnSend = (Button)findViewById(R.id.btnSend);
  60. editSend = (EditText)findViewById(R.id.sendMsg);
  61. btnSend.setEnabled(false);
  62. editSend.setEnabled(false);
  63. }
  64. public void closeSocket()
  65. {
  66. try
  67. {
  68. output.close();
  69. socket.close();
  70. }
  71. catch (IOException e)
  72. {
  73. handleException(e, "close exception: ");
  74. }
  75. }
  76. private void initClientSocket()
  77. {
  78. try
  79. {
  80. /* 連接服務器 */
  81. socket = new Socket(SERVER_HOST_IP, SERVER_HOST_PORT);
  82. /* 獲取輸出流 */
  83. output = new PrintStream(socket.getOutputStream(), true, "utf-8");
  84. btnConnect.setEnabled(false);
  85. editSend.setEnabled(true);
  86. btnSend.setEnabled(true);
  87. }
  88. catch (UnknownHostException e)
  89. {
  90. handleException(e, "unknown host exception: " + e.toString());
  91. }
  92. catch (IOException e)
  93. {
  94. handleException(e, "io exception: " + e.toString());
  95. }
  96. }
  97. private void sendMessage(String msg)
  98. {
  99. output.print(msg);
  100. }
  101. }
Copyright © Linux教程網 All Rights Reserved