国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中Socket的應用分析

2019-12-12 05:00:18
字體:
來源:轉載
供稿:網友

本文實例分析了Android中Socket的應用。分享給大家供大家參考,具體如下:

Android 提供的常用的網絡編程包括針對TCP/IP協議的Socket通信。Socket是一種跨平臺的編程方式,可以在異構語言之間進行通信。

Socket程序的開發原理,是要實現服務器端和客戶端。

服務器,使用ServerSocket監聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請求,客戶連接后,會話產生;在完成會話后,關閉連接。

客戶端,使用Socket對網絡上某一個服務器的某一個端口發出連接請求,一旦連接成功,打開會話;會話完成后,關閉Socket。客戶端不需要指定打開的端口,通常臨時的、動態的分配一個1024以上的端口。

下面是一個實現socket的例子:

服務器端代碼:

package com.socket;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;/*** com Server*/public class Main {  private int ServerPort = 9999;  private ServerSocket serversocket = null;  private OutputStream outputStream = null;  private InputStream inputStream = null;  private PrintWriter printWinter = null;  private Socket socket = null;  private BufferedReader reader = null;  public Main(){    try{      serversocket = new ServerSocket(ServerPort);      System.out.println("服務啟動。。。");      socket = serversocket.accept();      System.out.println("客戶已連接");    }catch(Exception ex){      ex.printStackTrace();    }    try{      outputStream= socket.getOutputStream();      inputStream = socket.getInputStream();      printWinter = new PrintWriter(outputStream,true);      reader = new BufferedReader(new InputStreamReader(inputStream));      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));      while (true){        String message = reader.readLine();        System.out.println("client:"+message);        if(message.equals("bye")||message.equals("Bye")){          break;        }        message = in.readLine();        printWinter.println(message);      }      outputStream.close();      inputStream.close();      socket.close();      serversocket.close();      System.out.print("Client is disconnected");    }catch(Exception e){      e.printStackTrace();    }finally{    }  }  public static void main(String[] args){    new Main();  }}

客服端代碼:

package com.Aina.Android;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.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class Test extends Activity implements Runnable {/** Called when the activity is first created. */private TextView tv_msg = null;private EditText ed_msg = null;private Button btn_send = null;private Button btn_login = null;private static final String HOST = "192.168.0.132";private static final int PORT = 9999;private Socket socket = null;private BufferedReader in = null;private PrintWriter out = null;private String content = "";@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv_msg = (TextView) this.findViewById(R.id.TextView); ed_msg = (EditText) this.findViewById(R.id.EditText01); btn_login = (Button) this.findViewById(R.id.Button01); btn_send = (Button) this.findViewById(R.id.Button02); try {  socket = new Socket(HOST, PORT);  in = new BufferedReader(new InputStreamReader(socket   .getInputStream()));  out = new PrintWriter(new BufferedWriter(   new OutputStreamWriter(socket.getOutputStream())),   true); } catch (Exception ex) {  ex.printStackTrace();  ShowDialog("登陸異常:" + ex.getMessage()); } btn_send.setOnClickListener(new Button.OnClickListener() {  public void onClick(View v) {  // TODO Auto-generated method stub  String msg = ed_msg.getText().toString();  if (socket.isConnected()) {   if (!socket.isOutputShutdown()) {   out.println(msg);   }  }  } }); new Thread(this).start();}public void ShowDialog(String msg) { new AlertDialog.Builder(this).setTitle("提示").setMessage(msg)  .setPositiveButton("OK", new DialogInterface.OnClickListener() {   public void onClick(DialogInterface dialog, int which) {   // TODO Auto-generated method stub   }  }).show();}public void run() { try {  while (true) {  if(socket.isConnected()){   if(!socket.isInputShutdown()){   if ((content = in.readLine()) != null) {    Log.i("TAG", "++ "+content);    content += "/n";    mHandler.sendMessage(mHandler.obtainMessage());   }else{   }   }  }  } } catch (Exception ex) {  ex.printStackTrace(); }}public Handler mHandler = new Handler() { public void handleMessage(Message msg) {  super.handleMessage(msg);  Log.i("TAG", "-- "+msg);  tv_msg.setText(tv_msg.getText().toString() + content); }};}

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/TextView" android:singleLine="false" android:layout_width="fill_parent" android:layout_height="wrap_content" /><EditText android:hint="content" android:id="@+id/EditText01" android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText><Button android:text="login" android:id="@+id/Button01" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button><Button android:text="send" android:id="@+id/Button02" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button></LinearLayout>

先啟動服務器端,再運行客戶端程序。

注意:

(一)即使服務器端和客戶端在一臺機器上運行,也不能使用ip地址:127.0.0.1,否則,程序會出現拒絕連接的錯誤。

(二)客戶端和服務器端最好不要建在一個工程下,最好是分別建立工程,然后啟動服務器端和客戶端,否則會報Error: ShouldNotReachHere()錯誤。這是因為Android程序不是已main方法為程序的入口。

運行效果:

更多關于Android相關內容感興趣的讀者可查看本站專題:《Android通信方式總結》、《Android調試技巧與常見問題解決方法匯總》、《Android開發入門與進階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昆山市| 远安县| 宁德市| 寿阳县| 石景山区| 玛沁县| 靖边县| 山丹县| 庆安县| 留坝县| 兴宁市| 儋州市| 会宁县| 巴林右旗| 弥勒县| 旺苍县| 兰溪市| 海口市| 东方市| 宁安市| 贵德县| 安吉县| 科尔| 惠安县| 泸西县| 巴楚县| 略阳县| 高要市| 兴国县| 独山县| 崇左市| 越西县| 光山县| 舒兰市| 大荔县| 金山区| 讷河市| 龙岩市| 乐陵市| 广水市| 淄博市|