日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Android中socket通信的簡單實現

瀏覽:185日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
另类小说一区二区三区| 日韩高清国产一区在线| 欧美日韩视频一区二区三区| 91大神在线观看线路一区| 免费国产亚洲视频| 久久电影tv| 青青青免费在线视频| 激情久久99| 日韩免费久久| 午夜免费一区| 亚洲综合激情在线| 日本欧美在线看| 男人天堂欧美日韩| 亚洲一区二区动漫| 亚洲欧洲日韩精品在线| 亚洲精品韩国| 亚洲精品字幕| 国产精品网站在线看| 久久激情中文| 蜜臀久久久久久久| 欧美日本久久| 国产精品香蕉| 久久激情中文| 国产伦理一区| 欧美aa在线观看| 亚洲精选91| 国产传媒在线观看| 日韩亚洲国产欧美| 日本午夜精品一区二区三区电影| 日韩激情av在线| 一本大道色婷婷在线| 日韩av资源网| 91亚洲一区| 欧美日本二区| 国产一区二区三区91| 丝袜诱惑制服诱惑色一区在线观看| 精品久久久网| 日韩精品午夜视频| 日韩精品午夜| 视频在线观看一区| 97se综合| 欧美好骚综合网| 影音先锋久久精品| 成人午夜在线| 国产日韩精品视频一区二区三区| 神马午夜在线视频| 欧美亚洲自偷自偷| 亚洲日本在线观看视频| 日韩精品欧美| 国产精品久久国产愉拍| 国产在线|日韩| 精品一区二区三区中文字幕视频 | 一区在线免费观看| 丰满少妇一区| 国产图片一区| 欧美午夜三级| 妖精视频成人观看www| 激情久久99| 国产精品亚洲综合久久| 日韩中文字幕无砖| 免费观看久久久4p| 六月婷婷一区| 国产综合亚洲精品一区二| av中文字幕在线观看第一页| 久久激情五月激情| 日韩精品亚洲专区在线观看| 蜜桃一区二区三区在线| 亚洲国产成人二区| 高清一区二区三区av| 少妇久久久久| 午夜欧美巨大性欧美巨大| 黄色国产精品| 欧美高清不卡| 久久免费精品| 99精品99| 青青青免费在线视频| 麻豆精品91| 91精品一区二区三区综合| 日韩成人午夜精品| 婷婷综合网站| 成人在线视频中文字幕| 中文不卡在线| av中文资源在线资源免费观看| 国产一区视频在线观看免费| 老司机精品视频在线播放| 日韩中文字幕| 欧美成人亚洲| 日本高清不卡一区二区三区视频| 国产精品成人一区二区网站软件| 99在线|亚洲一区二区| 国产精品国产三级国产在线观看| 亚洲精品99| 国产精品97| 激情五月综合| 新版的欧美在线视频| 国产日产高清欧美一区二区三区| 欧美亚洲国产激情| 欧美激情福利| 久久久久97| 久久久91麻豆精品国产一区| 亚洲资源在线| 亚洲精品免费观看| 国产三级一区| 国产伦精品一区二区三区在线播放| 日韩中文字幕亚洲一区二区va在线| 久久国产精品亚洲77777| 在线成人动漫av| 欧美日韩国产精品一区二区亚洲| 日韩极品在线观看| 青草国产精品久久久久久| 日韩av中文字幕一区二区三区| 视频在线观看一区二区三区| 国产综合精品一区| 中文字幕一区二区三区日韩精品| 亚洲18在线| 国产精品成人**免费视频| 欧美天堂一区| 国产精品国码视频| 欧美好骚综合网| 伊人久久大香线蕉av不卡| 国产欧美日韩精品一区二区三区| 六月婷婷一区| 亚洲精品国产偷自在线观看| 久久不射中文字幕| 欧美精品自拍| 蜜桃一区二区三区| 美女尤物国产一区| 日韩有码av| 欧美日韩亚洲一区三区| 蜜臀久久久99精品久久久久久| 男女精品网站| 香蕉久久久久久| 美女网站一区| 欧美专区18| 亚洲精品日本| 欧美激情aⅴ一区二区三区| 国产一区二区三区四区五区| 夜夜嗨网站十八久久| 日本亚洲欧美天堂免费| 在线手机中文字幕| 国产精品乱战久久久| 欧美~级网站不卡| 亚洲我射av| 精品国产欧美日韩| 99成人在线视频| 国产精品日本一区二区不卡视频| 首页国产精品| 午夜在线一区| 久久中文字幕二区| 国产精品网在线观看| 天堂中文在线播放| 国产精品一国产精品k频道56| 樱桃视频成人在线观看| 欧美亚洲二区| 丝袜亚洲另类欧美| 捆绑调教美女网站视频一区| 亚洲一二av| 欧美一级精品| 精品网站999| 日韩av一区二区三区四区| 丝袜美腿高跟呻吟高潮一区| 久久精品一区二区不卡| 国产一区福利| 日韩av在线播放网址| 国产精品大片| 免费一区二区三区在线视频| 在线观看亚洲精品福利片| 啪啪国产精品| 五月天av在线| www成人在线视频| 久久香蕉精品香蕉| 久久精品国产99| 国产精品22p| 视频在线在亚洲| 精品一区在线| 日韩欧美另类一区二区| 日韩高清电影一区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 视频在线不卡免费观看| 日韩成人av影视| 中文字幕一区二区三区四区久久 | 九九在线精品| 成人在线免费观看网站| 久久精品国产免费| 欧美亚洲一级| 欧美精品中文| 国产精品三p一区二区| 日韩成人午夜精品| 中文字幕日本一区| 国产一区二区三区自拍| 日韩成人精品一区| 精品欧美日韩精品| 国产网站在线| 福利一区二区| 亚洲精品88| 999国产精品999久久久久久| 美女视频黄 久久| 国产精品九九| 国产va在线视频| 加勒比视频一区|