logo资料库

android Socket实现简单聊天小程序.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
android Socket 实现简单聊天小程序 服务器端: Java 代码 1. package org.hwq.echo; 2. 3. import java.io.BufferedReader; 4. import java.io.IOException; 5. import java.io.InputStreamReader; 6. import java.io.PrintWriter; 7. import java.net.ServerSocket; 8. import java.net.Socket; 9. 10. public class TalkServer { 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ServerSocket server = null; Socket client = null; BufferedReader in = null; PrintWriter out = null; try{ public static void main(String[] args) throws IOException{ server = new ServerSocket(4700); client = server.accept(); out = new PrintWriter(client.getOutputStream()); in = new BufferedReader(new InputStreamReader(client.getInputStr eam())); String line = in.readLine(); while(!"bye".equals(line)){ System.out.println("client:"+line); out.println("echo:"+line); out.flush(); line = in.readLine(); } }catch (Exception e) { e.printStackTrace(); if(client !=null) client.close(); if(server != null) server.close(); } } 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. }
手机端: Java 代码 1. package org.hwq.cho; 2. 3. import java.io.BufferedReader; 4. import java.io.IOException; 5. import java.io.InputStreamReader; 6. import java.io.PrintWriter; 7. import java.net.Socket; 8. import java.net.UnknownHostException; 9. 10. import android.app.Activity; 11. import android.content.Context; 12. import android.os.Bundle; 13. import android.os.Handler; 14. import android.os.Message; 15. import android.view.View; 16. import android.view.View.OnClickListener; 17. import android.widget.Button; 18. import android.widget.EditText; 19. import android.widget.Toast; 20. 21. public class EchoActivity extends Activity implements OnClickListener { 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. // EditText show,msg; Button send; Handler handler; Socket client; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); handler = new MyHandler(); show = (EditText) findViewById(R.id.show); msg = (EditText) findViewById(R.id.msg); send = (Button) findViewById(R.id.send); send.setOnClickListener(this); } @Override public void onClick(View arg0) { String message = msg.getText().toString(); System.out.println("msg:"+message);
41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. new EchoThread(EchoActivity.this,message).start(); } public class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { switch(msg.what){ case 1: Toast.makeText(EchoActivity.this, "建立连接失败", 0).show (); break; case 2: String message = (String) msg.obj; System.out.println("Handler:"+message); show.append("\n"+message); break; } } } private class EchoThread extends Thread{ private Context context; private String msg; EchoThread(Context context,String msg){ this.context = context; this.msg = msg; } public void run(){ if(client == null){ try { client = new Socket("192.168.1.102",4700); } catch (IOException e) { Message message = new Message(); message.what = 1; handler.sendMessage(message); } } System.out.println("建立连接"); try{ BufferedReader in; BufferedReader input; PrintWriter out; in = new BufferedReader(new InputStreamReader(client.getInpu tStream())); out = new PrintWriter(client.getOutputStream()); String line = msg;
if(!"bye".equals(line)){ System.out.println("line:"+line); out.println(line); out.flush(); String echo = in.readLine(); System.out.println("server:"+echo); Message message = new Message(); message.obj = echo; message.what = 2; handler.sendMessage(message); } }catch (Exception e) { } } } 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. } 注意几点: 1、添加网络权限 Java 代码 1. 如果没添加,无法使用 socket 连接网络。 2、在新启线程中不要使用 android 系统 UI 界面 在 EchoThrad 的 run()方法里面,有下面代码: Java 代码 try { client = new Socket("192.168.1.102",4700); 1. if(client == null){ 2. 3. 4. 5. 6. 7. 8. 9. } } } catch (IOException e) { Message message = new Message(); message.what = 1; handler.sendMessage(message);
这里的 handler.sendMessage(message);是发送一个消息给 handler, 然后 handler 根据消息弹出一个 Toast 显示连接失败。如果这里直接使 用 Java 代码 1. Toast.makeText(EchoActivity.this, "建立连接失败", 0).show(); 会报如下错: Java 代码 1. Can't create handler inside thread that has not called Looper.prepare()
分享到:
收藏