Android中socket通信的簡單實現_Android

來源:腳本之家  責任編輯:小易  

Android使用的僅僅使用了PC 里邊的一個端口IP自然就是127.0.0.1了,或者是localhost吧關于5037口和5555口,找到了一個看起來合理的解釋:adb(Android Debug Bridge)包括三個部分:1)adb client,運行在PC上(為DDMS,即IDE工作)2)adb daemon(守護進程),運行于Emulator(為與Emulator中的VM交互工作);3)adb server(服務進程),運行在PC(任務管理器上有),管理著adb client和adb daemon的通信.server與client通信的端口是是5037,adb server會與emulator交互的,使用的端口有兩個,一個是5554專門用于與Emulator實例的連接,那么數據可以從Emulator轉發給IDE控制臺了,另一個則是5555,專門與adb daemon連接為后面調試使用www.13333515.buzz防采集請勿采集本網。

Android中socket通信簡單實現,供大家參考,具體內容如下

在遠標實現過:socket模擬網頁的報文連接某個網站,創建tcp的socket后,當我socket.connect后,如果在5到7秒鐘不socket.send,那么這個鏈接就失效了。 請問如何長時間的保持這個鏈接 這是在服務器端的設置的,客戶端沒法設置,可以發送心跳包。 s

socket通信需要有一個服務器和客戶端,可以把同一個APP作為服務器跟客戶端,也可以分開成兩個APP。

服務端往Socket的輸出流里面寫東西,客戶端就可以通過Socket的輸入流讀取對應的內容。Socket與Socket之間是雙向連通的,所以客戶端也可以往對應的Socket輸出流里面寫東西,然后服務端對應的Socket的輸入流就可以讀出對應的內容。 Socket類型為流

先上個圖:

1.PC服務器啟用ServerSocket兩個通信實體在建立虛擬鏈路之前,需要有一方先準備好,主動接受來自其他通信實體的連接請求。使用ServerSocket對象監聽來自客戶端的Socket連接。//創建ServerSocket對象ServerSocketss=newServerSocket(30000);//監

這里以一個APP作為服務器跟客戶端為示例

其實跟電腦差不多了,android里調用socket的方法,拿到socket后就可以發送數據并接收數據。 我最近正在做android方面的通信,真的想把完整的代碼都給你,可是沒辦法,公司機密。。 給你我的socket連接類吧。。。 package sean.socket; /////////

1、添加網絡訪問權限

1、android上的服務器分兩種: ① 用 java 寫的,這種比較簡單,但是需要注意的它的代碼已經被轉換成了大端了,pc上用c++寫傳結構體; ② 用 c/c++ 寫的,這種方式進行和pc上的通信比較的方便,客戶端和服務器段可以都通過結構來傳遞,唯一需要考

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

2、寫服務器,在APP上啟動

import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;public class Server { ServerSocket serverSocket = null; public final int port = 9998; private int i = 0; public Server(){ //輸出服務器的IP地址 try { InetAddress addr = InetAddress.getLocalHost(); System.out.println("local host:"+addr); serverSocket = new ServerSocket(port); System.out.println("0k"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void startService(){ try { Socket socket = null; System.out.println("waiting..."); //等待連接,每建立一個連接,就新建一個線程 while(true){ socket = serverSocket.accept();//等待一個客戶端的連接,在連接之前,此方法是阻塞的 System.out.println("connect to"+socket.getInetAddress()+":"+socket.getLocalPort()); new ConnectThread(socket).start(); } } catch (IOException e) { // TODO Auto-generated catch block System.out.println("IOException"); e.printStackTrace(); } } //向客戶端發送信息 class ConnectThread extends Thread{ Socket socket = null; public ConnectThread(Socket socket){ super(); this.socket = socket; } @Override public void run(){ try { DataInputStream dis = new DataInputStream(socket.getInputStream()); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); while(true){ i++; String msgRecv = dis.readUTF(); System.out.println("msg from client:"+msgRecv); dos.writeUTF(msgRecv + i); dos.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}

需要在線程中調用,調用方法:

new Thread(() -> new Server().startService()).start();

3、客戶端代碼

import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;import androidx.appcompat.app.AppCompatActivity;/** * @author fenghaitao * @time 2020年4月2日14:34:33 * scoket客戶端連接測試 */public class SocketActivity extends AppCompatActivity { //IP地址和端口號 public static String IP_ADDRESS = ""; public static int PORT = 9998; //三個控件 EditText et_message = null; //需要發送的內容 Button bt_getAdress = null; //獲取本機IP地址 Button bt_connect = null; //連接并發送 Button bt_startServer = null; //啟動服務端 TextView tv_adress = null; //ip地址 TextView tv_reply = null; //服務器回復的消息 //handler Handler handler = null; Socket soc = null; DataOutputStream dos = null; DataInputStream dis = null; String messageRecv = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_socket); et_message = findViewById(R.id.et_message); bt_getAdress = findViewById(R.id.bt_getAdress); bt_connect = findViewById(R.id.bt_connect); bt_startServer = findViewById(R.id.bt_startServer); tv_adress = findViewById(R.id.tv_adress); tv_reply = findViewById(R.id.tv_reply); bt_getAdress.setOnClickListener(v -> { new Thread(() -> { try { InetAddress addr = InetAddress.getLocalHost(); System.out.println("local host:"+addr); runOnUiThread(() -> tv_adress.setText(addr.toString().split("/")[1])); } catch (UnknownHostException e) { e.printStackTrace(); } }).start(); }); bt_startServer.setOnClickListener(v -> { new Thread(() -> new Server().startService()).start(); Toast.makeText(SocketActivity.this,"服務已啟動",Toast.LENGTH_SHORT).show(); }); bt_connect.setOnClickListener(v -> { IP_ADDRESS = tv_adress.getText().toString(); new ConnectionThread(et_message.getText().toString()).start(); }); handler = new Handler(msg -> { Bundle b = msg.getData(); //獲取消息中的Bundle對象 String str = b.getString("data"); //獲取鍵為data的字符串的值 tv_reply.append(str); return false; }); } //新建一個子線程,實現socket通信 class ConnectionThread extends Thread { String message = null; public ConnectionThread(String msg) { message = msg; } @Override public void run() { if (soc == null) { try { //Log.d("socket","new socket"); if ("".equals(IP_ADDRESS)) { return; } soc = new Socket(IP_ADDRESS, PORT); //獲取socket的輸入輸出流 dis = new DataInputStream(soc.getInputStream()); dos = new DataOutputStream(soc.getOutputStream()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { dos.writeUTF(message); dos.flush(); messageRecv = dis.readUTF();//如果沒有收到數據,會阻塞 Message msg = new Message(); Bundle b = new Bundle(); b.putString("data", messageRecv); msg.setData(b); handler.sendMessage(msg); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}

下面是xml頁面代碼

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SocketActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <Button android:id="@+id/bt_getAdress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="獲取IP地址"/> <TextView android:id="@+id/tv_adress" android:layout_width="200dp" android:layout_height="match_parent" android:layout_marginLeft="15dp" android:textSize="20dp" android:gravity="center"/> </LinearLayout> <Button android:id="@+id/bt_startServer" android:text="啟動服務" android:layout_marginTop="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <EditText android:id="@+id/et_message" android:layout_marginTop="10dp" android:hint="請輸入發送信息" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/bt_connect" android:text="連接發送" android:layout_marginTop="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv_reply" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="服務端返回消息:" android:textSize="30sp"/> </LinearLayout></LinearLayout>

客戶端跟服務器進行通信之前記得先啟動服務器,如果端口被占用需要換個端口。

有兩種方案:1、在PC機上建立服務器,手機與手機之間的通信通過服務器進行中轉2、一部手機作為服務器,另一部手機作為客戶端接入該手機一般是第一種方案內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • android socket通信詳解
  • android編程之客戶端通過socket與服務器通信的方法
  • android中socket通信的實現方法概述
  • python服務器與android客戶端socket通信實例
  • android中使用socket通信實現消息推送的方法詳解
  • android利用websocket協議與服務器通信
  • 詳解android 基于tcp和udp協議的socket通信
  • android開發中socket通信的基本實現方法講解
  • android基于socket實現的簡單c/s聊天通信功能
  • android socket通信實現簡單聊天室
  • kotlin中suppress的非常規用法示例
  • 分享一個android設置圓形圖片的特別方法
  • android 內存泄漏的幾種可能總結
  • android listview的滑動沖突解決方法
  • android studio 視頻播放失敗 start called in state1 異常怎么解
  • android編程實現屏幕禁止休眠的方法
  • android實現蒙版彈出框效果
  • android調用第三方qq登錄代碼分享
  • eclipse ndk遷移到android studio的方法示例
  • android如何獲取聯系人所有信息
  • 如何用socket實現android手機與手機之間的通信
  • android開發中,android虛擬機作為服務器與pc客戶端...
  • socket 實現android和電腦通信
  • android socket 簡易的通信源碼 要客戶端和服務器端
  • 如何干凈的實現Android/Java Socket 長連接通信
  • Android Socket通信開發,求詳細過程,附加注釋,...
  • 手機作為客戶端,電腦作為服務器進行android socke...
  • android如何與手機進行通信(Socket連接)
  • android服務端與電腦pc上c++的客戶端 實現socket通信
  • Android中如何實現兩個真機進行Socket通訊,比如A...
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全c#教程vbvb.netc 語言java編程delphijavaandroidiosswiftscala易語言匯編語言其它相關首頁androidandroid socket通信詳解android編程之客戶端通過socket與服務器通信的方法android中socket通信的實現方法概述python服務器與android客戶端socket通信實例android中使用socket通信實現消息推送的方法詳解android利用websocket協議與服務器通信詳解android 基于tcp和udp協議的socket通信android開發中socket通信的基本實現方法講解android基于socket實現的簡單c/s聊天通信功能android socket通信實現簡單聊天室kotlin中suppress的非常規用法示例分享一個android設置圓形圖片的特別方法android 內存泄漏的幾種可能總結android listview的滑動沖突解決方法android studio 視頻播放失敗 start called in state1 異常怎么解android編程實現屏幕禁止休眠的方法android實現蒙版彈出框效果android調用第三方qq登錄代碼分享eclipse ndk遷移到android studio的方法示例android如何獲取聯系人所有信息一看就懂的android app開發入門教微信公眾平臺開發入門教程(圖文詳android基礎之使用fragment控制切六款值得推薦的android(安卓)開android textview設置中文字體加android應用開發sharedpreferencandroid 動畫之translateanimatiandroid壓力測試命令monkey詳解android按鈕單擊事件的四種常用寫android調試工具ddms的使用詳解kotlin中關于內聯函數的一些理解分享android 區別真機和模擬器的幾種方法android listview 子控件onclick正確獲取android開發導入項目報錯ignoring innercandroid 解決webview無法上傳文件的問題解析如何在android中增加gsensor驅動(mmandroid sharedpreferences實現記住密碼和android popupwindow實現遮罩層效果android中.9.png圖片的使用及制作android本地存儲sharedpreferences詳解
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果