Android用戶端通過socket與伺服器通訊

來源:互聯網
上載者:User

下面是一個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;</p><p>import java.io.BufferedReader;<br />import java.io.BufferedWriter;<br />import java.io.InputStreamReader;<br />import java.io.OutputStreamWriter;<br />import java.io.PrintWriter;<br />import java.net.Socket;</p><p>import android.app.Activity;<br />import android.os.Bundle;<br />import android.util.Log;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;<br />import android.widget.EditText;<br />import android.widget.TextView;</p><p>public class Activity01 extends Activity<br />{<br />private final StringDEBUG_TAG= "Activity01";</p><p>private TextViewmTextView = null;<br />private EditTextmEditText = null;<br />private ButtonmButton = null;<br />/** Called when the activity is first created. */<br />@Override<br />public void onCreate(Bundle savedInstanceState)<br />{<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);</p><p>mButton = (Button)findViewById(R.id.Button01);<br />mTextView = (TextView)findViewById(R.id.TextView01);<br />mEditText = (EditText)findViewById(R.id.EditText01);</p><p>//登陸<br />mButton.setOnClickListener(new OnClickListener()<br />{<br />public void onClick(View v)<br />{<br />Socket socket = null;<br />String message = mEditText.getText().toString() + "/r/n";<br />try<br />{<br />//建立Socket<br />//socket = new Socket("192.168.1.110",54321);<br />socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,連接埠54321<br />//向伺服器發送訊息<br />PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);<br />out.println(message); </p><p>//接收來自伺服器的訊息<br />BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));<br />String msg = br.readLine(); </p><p>if ( msg != null )<br />{<br />mTextView.setText(msg);<br />}<br />else<br />{<br />mTextView.setText("資料錯誤!");<br />}<br />//關閉流<br />out.close();<br />br.close();<br />//關閉Socket<br />socket.close();<br />}<br />catch (Exception e)<br />{<br />// TODO: handle exception<br />Log.e(DEBUG_TAG, e.toString());<br />}<br />}<br />});<br />}<br />}<br />

布局檔案main.xml

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ><br /><TextView<br />android:id="@+id/TextView01"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="這裡顯示接收到伺服器發來的資訊"<br /> /><br /><EditText<br />android:id="@+id/EditText01"<br />android:text="輸入要發送的內容"<br />android:layout_width="fill_parent"<br />android:layout_height="wrap_content"><br /></EditText><br /> <Button<br />android:id="@+id/Button01"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="發送"<br /> /><br /></LinearLayout>

AndroidManifest.xml檔案如下

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

當然,還有伺服器端得代碼

package com.yarin.android.Examples_08_04;</p><p>import java.io.BufferedReader;<br />import java.io.BufferedWriter;<br />import java.io.InputStreamReader;<br />import java.io.OutputStreamWriter;<br />import java.io.PrintWriter;<br />import java.net.ServerSocket;<br />import java.net.Socket;</p><p>public class Server implements Runnable<br />{<br />public void run()<br />{<br />try<br />{<br />//建立ServerSocket<br />ServerSocket serverSocket = new ServerSocket(54321);<br />while (true)<br />{<br />//接受用戶端請求<br />Socket client = serverSocket.accept();<br />System.out.println("accept");<br />try<br />{<br />//接收用戶端訊息<br />BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));<br />String str = in.readLine();<br />System.out.println("read:" + str);<br />//向伺服器發送訊息<br />PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);<br />out.println("server message");<br />//關閉流<br />out.close();<br />in.close();<br />}<br />catch (Exception e)<br />{<br />System.out.println(e.getMessage());<br />e.printStackTrace();<br />}<br />finally<br />{<br />//關閉<br />client.close();<br />System.out.println("close");<br />}<br />}<br />}<br />catch (Exception e)<br />{<br />System.out.println(e.getMessage());<br />}<br />}<br />//main函數,開啟伺服器<br />public static void main(String a[])<br />{<br />Thread desktopServerThread = new Thread(new Server());<br />desktopServerThread.start();<br />}<br />}<br />

先開啟伺服器代碼,

java  Server即可

然後啟動android模擬器。運行結果

這是Android用戶端。輸入12345,點擊發送:

 

 

這是伺服器端收到的訊息

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.