下面是一个demo,Android客户端通过socket与服务器通信。

由于Android里面可以完全使用java.io.*包和java.net.*包,那么,实际上,逻辑部分与J2SE没有区别。只是UI代码不一样。

Android客户端通过socket与服务器通信分为下面5步:

(1)通过IP地址和端口实例化Socket,请求连接服务器;

[java] view plain copy
  1. socket=newSocket("10.14.114.127",54321);//IP:10.14.114.127,端口54321

(2)获取Socket流以进行读写,并把流包装进BufferWriter或者PrintWriter

[java] view plain copy
  1. PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);

这里涉及了三个类:socket.getOutputStream得到socket的输出字节流,OutputStreamWriter是字节流向字符流转换的桥梁,BufferWriter是字符流,然后再包装进PrintWriter。

(3)对Socket进行读写

[java] view plain copy
  1. out.println(message);

(4)关闭打开的流

[java] view plain copy
  1. out.close();

完整工程代码如下:

[java] view plain copy
  1. packagecom.yarin.android.Examples_08_04;
  2. importjava.io.BufferedReader;
  3. importjava.io.BufferedWriter;
  4. importjava.io.InputStreamReader;
  5. importjava.io.OutputStreamWriter;
  6. importjava.io.PrintWriter;
  7. importjava.net.Socket;
  8. importandroid.app.Activity;
  9. importandroid.os.Bundle;
  10. importandroid.util.Log;
  11. importandroid.view.View;
  12. importandroid.view.View.OnClickListener;
  13. importandroid.widget.Button;
  14. importandroid.widget.EditText;
  15. importandroid.widget.TextView;
  16. publicclassActivity01extendsActivity
  17. {
  18. privatefinalStringDEBUG_TAG="Activity01";
  19. privateTextViewmTextView=null;
  20. privateEditTextmEditText=null;
  21. privateButtonmButton=null;
  22. /**Calledwhentheactivityisfirstcreated.*/
  23. @Override
  24. publicvoidonCreate(BundlesavedInstanceState)
  25. {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.main);
  28. mButton=(Button)findViewById(R.id.Button01);
  29. mTextView=(TextView)findViewById(R.id.TextView01);
  30. mEditText=(EditText)findViewById(R.id.EditText01);
  31. //登陆
  32. mButton.setOnClickListener(newOnClickListener()
  33. {
  34. publicvoidonClick(Viewv)
  35. {
  36. Socketsocket=null;
  37. Stringmessage=mEditText.getText().toString()+"/r/n";
  38. try
  39. {
  40. //创建Socket
  41. //socket=newSocket("192.168.1.110",54321);
  42. socket=newSocket("10.14.114.127",54321);//IP:10.14.114.127,端口54321
  43. //向服务器发送消息
  44. PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
  45. out.println(message);
  46. //接收来自服务器的消息
  47. BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream()));
  48. Stringmsg=br.readLine();
  49. if(msg!=null)
  50. {
  51. mTextView.setText(msg);
  52. }
  53. else
  54. {
  55. mTextView.setText("数据错误!");
  56. }
  57. //关闭流
  58. out.close();
  59. br.close();
  60. //关闭Socket
  61. socket.close();
  62. }
  63. catch(Exceptione)
  64. {
  65. //TODO:handleexception
  66. Log.e(DEBUG_TAG,e.toString());
  67. }
  68. }
  69. });
  70. }
  71. }

布局文件main.xml

[java] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:id="@+id/TextView01"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="这里显示接收到服务器发来的信息"
  12. />
  13. <EditText
  14. android:id="@+id/EditText01"
  15. android:text="输入要发送的内容"
  16. android:layout_width="fill_parent"
  17. android:layout_height="wrap_content">
  18. </EditText>
  19. <Button
  20. android:id="@+id/Button01"
  21. android:layout_width="fill_parent"
  22. android:layout_height="wrap_content"
  23. android:text="发送"
  24. />
  25. </LinearLayout>

AndroidManifest.xml文件如下

[java] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.yarin.android.Examples_08_04"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  7. <activityandroid:name=".Activity01"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <actionandroid:name="android.intent.action.MAIN"/>
  11. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. <uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>
  16. <uses-sdkandroid:minSdkVersion="5"/>
  17. </manifest>

当然,还有服务器端得代码

[java] view plain copy
  1. packagecom.yarin.android.Examples_08_04;
  2. importjava.io.BufferedReader;
  3. importjava.io.BufferedWriter;
  4. importjava.io.InputStreamReader;
  5. importjava.io.OutputStreamWriter;
  6. importjava.io.PrintWriter;
  7. importjava.net.ServerSocket;
  8. importjava.net.Socket;
  9. publicclassServerimplementsRunnable
  10. {
  11. publicvoidrun()
  12. {
  13. try
  14. {
  15. //创建ServerSocket
  16. ServerSocketserverSocket=newServerSocket(54321);
  17. while(true)
  18. {
  19. //接受客户端请求
  20. Socketclient=serverSocket.accept();
  21. System.out.println("accept");
  22. try
  23. {
  24. //接收客户端消息
  25. BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream()));
  26. Stringstr=in.readLine();
  27. System.out.println("read:"+str);
  28. //向服务器发送消息
  29. PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(client.getOutputStream())),true);
  30. out.println("servermessage");
  31. //关闭流
  32. out.close();
  33. in.close();
  34. }
  35. catch(Exceptione)
  36. {
  37. System.out.println(e.getMessage());
  38. e.printStackTrace();
  39. }
  40. finally
  41. {
  42. //关闭
  43. client.close();
  44. System.out.println("close");
  45. }
  46. }
  47. }
  48. catch(Exceptione)
  49. {
  50. System.out.println(e.getMessage());
  51. }
  52. }
  53. //main函数,开启服务器
  54. publicstaticvoidmain(Stringa[])
  55. {
  56. ThreaddesktopServerThread=newThread(newServer());
  57. desktopServerThread.start();
  58. }
  59. }

先开启服务器代码,

java Server即可

然后启动android模拟器。运行结果

这是Android客户端。输入12345,点击发送:

这是服务器端收到的消息

更多相关文章

  1. Android(安卓)Push Notificatioin Service(Android消息推送)
  2. 开发android,我们需要哪些技能基础
  3. Android推送通知指南
  4. Android客户端通过socket与服务器通信
  5. Android(安卓)Debug Bridge 技术实现原理
  6. android消息推送-XMPP
  7. Android(安卓)新闻客户端案例
  8. Android《第三章:AIDL与Messenger》
  9. Android之UI学习篇十:使用TabHost实现微博客户端界面

随机推荐

  1. [Android]使用permission保护数据
  2. Android的触摸(Touch)机制
  3. android 通过经纬度获取地址信息
  4. 应用布局说明
  5. android 通话列表
  6. Linear Layout 布局技巧
  7. Android基于tess-two的离线身份证等图片
  8. Android布局优化----ViewStub、include、
  9. Intellij IDEA + Android SDK + Genymoti
  10. 关于android的反射机制的用法