Android基於TCP協議的Socket通信簡單實例

来源:https://www.cnblogs.com/liuleliu/archive/2020/03/02/12397407.html
-Advertisement-
Play Games

Socket通信有兩種主要方式:TCP協議和UDP協議,兩者區別是TCP協議要首先和接收方要建立連接然後發送數據,這樣數據能保證送達,但速度較慢;UDP協議首先把數據打包,然後直接發送到接收方,無需建立連接誒,速度快,但容易丟失數據。這裡是一個簡單的基於TCP協議的通信實例: 直接上代碼: 首先是j ...


Socket通信有兩種主要方式:TCP協議和UDP協議,兩者區別是TCP協議要首先和接收方要建立連接然後發送數據,這樣數據能保證送達,但速度較慢;UDP協議首先把數據打包,然後直接發送到接收方,無需建立連接誒,速度快,但容易丟失數據。這裡是一個簡單的基於TCP協議的通信實例:

直接上代碼:

首先是java伺服器的編寫:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;



public class netserver {

    public static void main(String[] args) throws IOException {
        
        
        
        ServerSocket server=new ServerSocket(9090);//9090是埠號,由自己設置
        System.out.println("伺服器已啟動");
        Socket client=server.accept();//接收客戶端請求
//        PrintStream out=new PrintStream(client.getOutputStream());
        PrintWriter out=new PrintWriter(new OutputStreamWriter(client.getOutputStream(),"UTF-8"),true);
        BufferedReader msg=new BufferedReader(new InputStreamReader(client.getInputStream(),"UTF-8"));//對緩衝區數據讀取
    StringBuffer info=new StringBuffer();//接收客戶端發來的消息
    
    info.append("I'm fine.你好! ");//回應的數據
    info.append(msg.readLine());//接收的數據
    System.out.println(info);//控制台輸出將要發出的信息
    out.print(info);//發送到客戶端
    out.close();
    msg.close();
    client.close();
    server.close();
    
    }

}

接下來是安卓客戶端的代碼:

package com.example.scoket;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private Button send=null;
private TextView info=null;
private Handler handler=null;
private String s="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        send=(Button)findViewById(R.id.send);
        info=(TextView) findViewById(R.id.info);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread()
                {
                    public void run(){
                        try {
                            Socket client=new
Socket("10.0.2.2",9090);//括弧內為(伺服器,埠號)
                           
                            PrintStream out=new PrintStream(client.getOutputStream());                
                            BufferedReader msgget=new BufferedReader(new InputStreamReader(client.getInputStream(),"UTF-8"));//讀取返回的數據
                            out.println("已連接伺服器");
                            s=msgget.readLine();
                            out.close();
                            msgget.close();
                            client.close();
                        }
                        catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                        handler.sendEmptyMessage(0);}}.start();
                handler =new Handler() {

                    //當有消息發來的時候就執行Handler方法
                public void handleMessage(Message msg)
                {
                    super.handleMessage(msg);
                    info.setText(s);
                }

                };
            }
        });    
    }
}

伺服器就填伺服器的ip地址,如果伺服器是在自己電腦上的,客戶端在虛擬機上,那麼伺服器就填10.0.2.2,若是區域網連接的,就用在win+r >cmd>config查詢一下電腦的ip;埠號必須與伺服器一致,挑選的埠如果顯示被占用就換一個,埠的取值就自行百度。

運行時先啟動伺服器,在運行客戶端

運行效果:

客戶端+伺服器控制台

按鈕點擊前:

 

 

 

 點擊後:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 楔子 假設現在你已經是某大型互聯網公司的高級程式員,讓你寫一個火車票購票系統,來hold住十一期間全國的購票需求,你怎麼寫? 由於在同一時段搶票的人數太多,所以你的程式不可能寫在一臺機器上,應該是多台機器一起分擔用戶的購票請求。 那麼問題就來了,票務信息的數據存在哪裡?存在文件里麽? 如果存儲在文件 ...
  • 作者:友盟+數據技術專家 譚純 簡介: 2020年註定是不同尋常的,突如其來的疫情按下了人們生活的暫停鍵。對於用戶激增的App而言有喜有憂,如何快速沉澱數據資產,因為疫情是脈衝式的需求,等疫情結束之後,如何把這些激增的用戶轉化為留存是很大的挑戰。對於非利好的App,如何讓數據成為護城河。回答這兩個問 ...
  • 本文源碼: "GitHub·點這裡" || "GitEE·點這裡" 一、MySQL邏輯架構 1、邏輯架構圖 基於下麵的邏輯架構圖,可以大致熟悉MySQL各個架構組件之間的協同工作關係。 很經典的C/S架構風格,即客戶端/服務端模式。 2、分層描述 客戶端連接 通常會進行連接池管理,連接用戶許可權認證, ...
  • "概要" "Spark 單機環境配置" "JDK 環境配置" "Spark 環境配置" "python 環境配置" "Spark 使用示例" "示例代碼 (order\_stat.py)" "測試用的 csv 文件內容 (orders.csv)" "運行結果" 概要 大數據和人工智慧已經宣傳了好多年 ...
  • 查詢中出現兩個表的連接,下麵通過實例來講解一下各種連接查詢的不同之處 表 a,和表b 如下圖 a 表中 有 abcd b表中有 abcf 內連接: 得出結果 如圖,選擇等值的結果(abc) 左連接: 查詢結果如圖,選擇a表為基準。(abcd) 右連接: 查詢結果如圖,選擇a表為基準。(abcf) 全 ...
  • 第一步 下載安裝包: 官網 畢竟是甲骨文公司的產品,去官網下真的慢! 這裡有兩個供選擇的,我建議選第一個(因為我先下了第二個,結果失敗了,不知道為什麼總是出錯。) 下載完自行選擇路徑解壓就可以了。 第二步 配置my.ini: 在根目錄下新建文本文件,將下麵的複製上,註意修改尾碼為.ini [mysq ...
  • 疫情已經持續了好幾個月了,作為程式員滴我們也幫不上什麼忙,只有老老實實呆在家裡或者出門一定戴口罩準守一些規則,不給國家添亂。不過最近疫情開始有所扭轉,但是還是對國家經濟,對企業業務造成了很大的影響,我也被停止了實習。接下來,可能會面臨著失業,破產等等嚴肅的問題。但是我們還是需要繼續學習,提高自己的競 ...
  • Oracle體繫結構 實例: 一個操作系統只有一個 Oracle 資料庫 一個 Oracle 資料庫可以有多個 Oracle 實例(通常只安裝一個實例) 一個實例對應著一系列的後臺進程和記憶體結構 表空間: 一個實例在邏輯上可以分成若幹個表空間 表空間是 Oracle 對數據文件的邏輯映射 表空間不屬 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...