电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android中socket通信的簡單實現

瀏覽:117日期:2022-09-25 08:23:55

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

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

Android中socket通信的簡單實現

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

1、添加網絡訪問權限

<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: android:layout_width='wrap_content' android:layout_height='wrap_content' android:text='獲取IP地址'/> <TextView android: android:layout_width='200dp' android:layout_height='match_parent' android:layout_marginLeft='15dp' android:textSize='20dp' android:gravity='center'/> </LinearLayout> <Button android: android:text='啟動服務' android:layout_marginTop='10dp' android:layout_width='wrap_content' android:layout_height='wrap_content'/> <EditText android: android:layout_marginTop='10dp' android:hint='請輸入發送信息' android:layout_width='wrap_content' android:layout_height='wrap_content'/> <Button android: android:text='連接發送' android:layout_marginTop='10dp' android:layout_width='wrap_content' android:layout_height='wrap_content'/> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_marginTop='10dp' android:text='服務端返回消息:' android:textSize='30sp'/> </LinearLayout></LinearLayout>

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
主站蜘蛛池模板: 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | uv机-uv灯-uvled光固化机-生产厂家-蓝盾机电 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 风信子发稿-专注为企业提供全球新闻稿发布服务 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 高温热泵烘干机,高温烘干热泵,热水设备机组_正旭热泵 | 北京燃气公司 用户服务中心| 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 压力喷雾干燥机,喷雾干燥设备,柱塞隔膜泵-无锡市闻华干燥设备有限公司 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 食安观察网| 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 潍坊大集网-潍坊信息港-潍坊信息网| 辊道窑炉,辊道窑炉厂家-山东艾希尔 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 物和码官网,物和码,免费一物一码数字化营销SaaS平台 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 |