广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Android编程之客户端通过socket与服务器通信的方法

    2018-05-07 10:24:47 次阅读 稿源:互联网
    广告

    本文实例讲述了Android编程之客户端通过socket与服务器通信的方法。分享给大家供大家参考,具体如下:

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

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

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

    (1)通过IP地址和端口实例化Socket,请求连接服务器;
    代码如下:
    socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321
    (2)获取Socket流以进行读写,并把流包装进BufferWriter或者PrintWriter
    代码如下:
    PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
    这里涉及了三个类:socket.getOutputStream得到socket的输出字节流,OutputStreamWriter是字节流向字符流转换的桥梁,BufferWriter是字符流,然后再包装进PrintWriter。

    (3)对Socket进行读写
    代码如下:
    out.println(message);
    (4)关闭打开的流
    代码如下:
    out.close();
    完整工程代码如下:

    package com.yarin.android.Examples_08_04; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Activity01 extends Activity {   private final String    DEBUG_TAG  = "Activity01";   private TextView  mTextView = null;   private EditText  mEditText = null;   private Button   mButton = null;   /** Called when the activity is first created. */   @Override   public void onCreate(Bundle savedInstanceState)   {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     mButton = (Button)findViewById(R.id.Button01);     mTextView = (TextView)findViewById(R.id.TextView01);     mEditText = (EditText)findViewById(R.id.EditText01);     //登陆     mButton.setOnClickListener(new OnClickListener()     {       public void onClick(View v)       {         Socket socket = null;         String message = mEditText.getText().toString() + "/r/n";          try          {             //创建Socket //         socket = new Socket("192.168.1.110",54321);            socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321           //向服务器发送消息           PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);              out.println(message);            //接收来自服务器的消息           BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));            String msg = br.readLine();            if ( msg != null )           {             mTextView.setText(msg);           }           else           {             mTextView.setText("数据错误!");           }           //关闭流           out.close();           br.close();           //关闭Socket           socket.close();          }         catch (Exception e)          {           // TODO: handle exception           Log.e(DEBUG_TAG, e.toString());         }       }     });   } }

    布局文件main.xml

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="vertical"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   >   <TextView    android:id="@+id/TextView01"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="这里显示接收到服务器发来的信息"   />   <EditText    android:id="@+id/EditText01"    android:text="输入要发送的内容"    android:layout_width="fill_parent"    android:layout_height="wrap_content">   </EditText>   <Button    android:id="@+id/Button01"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:text="发送"   />  </LinearLayout>

    AndroidManifest.xml文件如下

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.yarin.android.Examples_08_04"    android:versionCode="1"    android:versionName="1.0">   <application android:icon="@drawable/icon" android:label="@string/app_name">    <activity android:name=".Activity01"          android:label="@string/app_name">       <intent-filter>         <action android:name="android.intent.action.MAIN" />         <category android:name="android.intent.category.LAUNCHER" />       </intent-filter>     </activity>   </application>   <uses-permission android:name="android.permission.INTERNET"></uses-permission>   <uses-sdk android:minSdkVersion="5" /> </manifest>

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

    package com.yarin.android.Examples_08_04; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class Server implements Runnable {   public void run()   {     try     {       //创建ServerSocket       ServerSocket serverSocket = new ServerSocket(54321);       while (true)       {         //接受客户端请求         Socket client = serverSocket.accept();         System.out.println("accept");         try         {           //接收客户端消息           BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));           String str = in.readLine();           System.out.println("read:" + str);            //向服务器发送消息           PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);              out.println("server message");            //关闭流           out.close();           in.close();         }         catch (Exception e)         {           System.out.println(e.getMessage());           e.printStackTrace();         }         finally         {           //关闭           client.close();           System.out.println("close");         }       }     }     catch (Exception e)     {       System.out.println(e.getMessage());     }   }   //main函数,开启服务器   public static void main(String a[])   {     Thread desktopServerThread = new Thread(new Server());     desktopServerThread.start();   } }

    先开启服务器代码

    java  Server即可

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

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

    这是服务器端收到的消息

    希望本文所述对大家Android程序设计有所帮助。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告