android服务器和客户端通信1

Android客户端通过socket与服务器通信。

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

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

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

 

view plain

1.   socket = new Socket("10.14.114.127",54321); //IP10.14.114.127,端口54321  

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

view plain

1.   PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);     

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

3)对Socket进行读写

view plain

1.   out.println(message);  

 

4)关闭打开的流

view plain

1.   out.close();  

完整工程代码如下:

view plain

1.   package com.yarin.android.Examples_08_04;  

2.     

3.   import java.io.BufferedReader;  

4.   import java.io.BufferedWriter;  

5.   import java.io.InputStreamReader;  

6.   import java.io.OutputStreamWriter;  

7.   import java.io.PrintWriter;  

8.   import java.net.Socket;  

9.     

10.  import android.app.Activity;  

11.  import android.os.Bundle;  

12.  import android.util.Log;  

13.  import android.view.View;  

14.  import android.view.View.OnClickListener;  

15.  import android.widget.Button;  

16.  import android.widget.EditText;  

17.  import android.widget.TextView;  

18.    

19.  public class Activity01 extends Activity  

20.  {  

21.      private final String        DEBUG_TAG   = "Activity01";  

22.        

23.      private TextView    mTextView = null;  

24.      private EditText    mEditText = null;  

25.      private Button      mButton = null;  

26.        

27.      @Override  

28.      public void onCreate(Bundle savedInstanceState)  

29.      {  

30.          super.onCreate(savedInstanceState);  

31.          setContentView(R.layout.main);  

32.            

33.          mButton = (Button)findViewById(R.id.Button01);  

34.          mTextView = (TextView)findViewById(R.id.TextView01);  

35.          mEditText = (EditText)findViewById(R.id.EditText01);  

36.            

37.          //登陆  

38.          mButton.setOnClickListener(new OnClickListener()  

39.          {  

40.              public void onClick(View v)  

41.              {  

42.                  Socket socket = null;  

43.                  String message = mEditText.getText().toString() + "/r/n";   

44.                  try   

45.                  {     

46.                      //创建Socket  

47.  //                  socket = new Socket("192.168.1.110",54321);   

48.                      socket = new Socket("10.14.114.127",54321); //IP10.14.114.127,端口54321  

49.                      //向服务器发送消息  

50.                      PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);        

51.                      out.println(message);   

52.                        

53.                      //接收来自服务器的消息  

54.                      BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));   

55.                      String msg = br.readLine();   

56.                        

57.                      if ( msg != null )  

58.                      {  

59.                          mTextView.setText(msg);  

60.                      }  

61.                      else  

62.                      {  

63.                          mTextView.setText("数据错误!");  

64.                      }  

65.                      //关闭流  

66.                      out.close();  

67.                      br.close();  

68.                      //关闭Socket  

69.                      socket.close();   

70.                  }  

71.                  catch (Exception e)   

72.                  {  

73.                      // TODO: handle exception  

74.                      Log.e(DEBUG_TAG, e.toString());  

75.                  }  

76.              }  

77.          });  

78.      }  

79.  }  

布局文件main.xml

1.   <?xml version="1.0" encoding="utf-8"?>  

2.   <LinearLayout xmlns: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文件如下

1.   <?xml version="1.0" encoding="utf-8"?>  

2.   <manifest xmlns: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.       <application android:icon="@drawable/icon" android:label="@string/app_name">  

7.           <activity android:name=".Activity01"  

8.                     android:label="@string/app_name">  

9.               <intent-filter>  

10.                  <action android:name="android.intent.action.MAIN" />  

11.                  <category android:name="android.intent.category.LAUNCHER" />  

12.              </intent-filter>  

13.          </activity>  

14.      </application>  

15.      <uses-permission android:name="android.permission.INTERNET"></uses-permission>  

16.      <uses-sdk android:minSdkVersion="5" />  

17.  </manifest>   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值