Android TCP/UDP通訊試煉以及部分程式
客戶端
- publicclass MainActivity extends AppCompatActivity {
- privatestaticfinal String TAG = "lzy";
- private Context context;
- private TextView mTextView;
- @Override
- protectedvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- context = this;
- mTextView = (TextView) findViewById(R.id.tv);
- }
- publicvoid bt(View view) {
- new Thread() {
- @Override
- publicvoid run() {
- try {
- Socket socket = new Socket("172.16.7.234", 3000);
- BufferedReader br = new
- String line = br.readLine();
- Log.i(TAG, "讀取資料:" + line);
- br.close();
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }.start();
- }
- }
設定Socket的超時時間
setSoTimeout(int timeout) :設定Socket的超時時間,不能小於0,如果使用Socket進行讀寫操作完成之前已經超出了這個時間,那麼就會丟擲SocketException。
設定Socket連線伺服器超時時間
- //建立一個無連線的Socket
- Socket socket = new Socket();
- //讓Socket連線到遠端伺服器,如果經過1秒沒有連線到則認為超時
- socket.connect(new InetSocketAddress(host,port),1000);
再寫一個聊天室的小應用來看看Socket的使用
服務端
在Android Studio建立一個服務端,點選File->New->New Module,建立一個Java Library
- publicclass MyServer {
- publicstatic List<Socket> listSocket = new ArrayList<>();
- publicstaticvoid main(String[] args) throws IOException {
- ServerSocket serverSocket = new ServerSocket(808);
- while (true) {
- //等待連線
- Socket socket = serverSocket.accept();
- System.out.println("a target online");
- listSocket.add(socket);
- //每當客戶端連線成功 後啟動一條執行緒為該客戶端服務
- new Thread(new ServerThread(socket)).start();
- }
- }
- }
listSocket是用於儲存客戶端連線後產生的Socket物件。
這段程式碼首先是在8080埠建立一個ServerSocket,然後是一個while的死迴圈呼叫ServerSocket的accept方法不停的接收來自客戶端的連線請求,然後為這個客戶端開啟一個執行緒為其服務
- publicclass ServerThread implements Runnable {
- private Socket socket;
- private BufferedReader br;
- public ServerThread(Socket socket) throws IOException {
- this.socket = socket;
- br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
- }
- @Override
- publicvoid run() {
- String content;
- //不斷把客服端的資料讀取出來
- while ((content = readFromClient()) != null) {
- //把收到的訊息遍歷發給每一個 連線了的客戶端
- for (Iterator<Socket> iterator = MyServer.listSocket.iterator(); iterator.hasNext(); ) {
- Socket socket = iterator.next();
- //打印出客服端的Ip和埠號
- System.out.println("IP:" + socket.getInetAddress() + " port:" + socket.getPort());
- try {
- OutputStream os = socket.getOutputStream();
- os.write((content + "\n").getBytes("utf-8"));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- private String readFromClient() {
- try {
- return br.readLine();
- } catch (IOException e) {
- e.printStackTrace();
- MyServer.listSocket.remove(socket);
- }
- returnnull;
- }
- }
在這個執行緒中把Socket的資料讀到BufferedReader裡面,然後通過一個while迴圈把訊息讀取來遍歷傳送給每一個連線了的客戶端。
readFromClient用來讀取接收到的客戶端資料,如果發生了異常就把這個Socket移除。
客戶端
MainActivity
- publicclass MainActivity extends AppCompatActivity {
- privatestaticfinal String TAG = "lzy";
- private List<String> list = new ArrayList<>();
- private RecyclerView mRecyclerView;
- private Context context;
- private ChatAdapter adapter;
- private EditText mEditText;
- private ClientThread clientThread;
- //用於傳送接收到的服務端的訊息,顯示在介面上
- private Handler handler = new Handler() {
- @Override
- publicvoid handleMessage(Message msg) {
- list.add(msg.obj.toString());
- adapter.notifyDataSetChanged();
- }
- };
- @Override
- protectedvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- context =
相關推薦
Android TCP/UDP通訊試煉以及部分程式
客戶端publicclass MainActivity extends AppCompatActivity { privatestaticfinal String TAG = "lzy"; private Context context; private TextView mTe
PC和Android模擬器訪問及模擬器之間tcp/udp通訊
Android系統預設只能通過IP(10.0.2.2)單向訪問PC電腦,而PC電腦不能通過IP來直接訪問Android模擬器系統。要想實現PC電腦和Android模擬器系統以及Android模擬器之間相互通訊必須藉助埠重定向(redir)來實現。 先說說埠重定向所需要的telnet客戶端安裝: windo
TCP UDP 通訊技術
什麼是 TCP UDP呢,不懂的,送概念連線一份: https://baike.baidu.com/item/UDP/571511?fr=aladdin https://baike.baidu.com/item/TCP/IP%E5%8D%8F%E8%AE%AE 簡單來講,TCP
設計多個非本地IP之間進行TCP/UDP通訊
工作需要,遇到過一個問題,需要模擬多個非本地IP之間進行TCP/UDP通訊,一開始以為非常簡單,直到遇到錯誤“非法IP”“該請求地址無效”"指定了無效的IP地址"這些錯誤,就是本地模擬TCP/UDP時出了本地迴環地址127.0.0.1其它地址都是無法識別的,程式不知道怎麼建立套接字,也不知道傳送給誰
TCP UDP粘包和程序部分
TCP 半連線池原理 #客戶端 import socket client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect(("127.0.0.1",9999)) while
C# TCP/UDP 通訊程式碼講解
之前寫一個檔案傳輸軟體的時候不過的瞭解這 TCP和UDP的 一些概念和 知識,趁著目前還熱乎著,寫下來溫習一下。。第一次寫部落格 有不好的地方歡迎指出來。 首先介紹下我之前寫的思路。大家都知道 UDP是沒有連線是不可靠的,而TCP是面向連線可靠的連線。雖然TCP面向連線並
Android TCP socket通訊
之前做過的一個區域網內TCP通訊、聊天的demo(當然不是區域網也可以進行通訊,剛試了一下可以的),週日整理了一下。該demo可以做客戶端,也可以做服務端。兩個手機都安裝該應用,一個做客戶端、一個做服務端,然後進行通訊(連線在同一區域網,或伺服器是外網ip,
TCP/UDP通訊協議基礎全集(區別,三次握手四次揮手)
在本篇部落格你將瞭解到: 什麼是TCP/IP和UDP協議 TCP協議中的三次握手和四次揮手過程 為什麼連線的時候是三次握手,關閉的時候卻是四次握手 為什麼TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態 TCP與UDP的
JAVA中TCP,UDP傳輸 簡單的聊天室程式
JAVA中聊天室程式 要求: 編寫一個聊天程式 有收資料的部分,也同時有發資料的部分。 這兩部分需要同時執行,那就需要用到多執行緒技術。 一個執行緒控制發,一個執行緒控制收。 注意 這裡我們需要注意的是,因為收發動作是不一致的,所以要定義兩個run方法,而且這兩
Android程序間通訊 - Socket使用(TCP、UDP)
在使用Socket實現程序間通訊前,先對網路協議相關知識進行簡單回顧。 網路分層 一般情況會將網路分為5層: 應用層 常見協議:HTTP、FTP、POP3等 傳輸層
Socket 通訊原理(Android客戶端和伺服器以TCP&&UDP方式互通)
ZERO、前言 有關通訊原理內容是在網上或百科整理得到,程式碼部分為本人所寫,如果不當,還望指教。 一、Socket通訊簡介 Android與伺服器的通訊方式主要有兩種,一是Http通訊,一是Socket通訊。兩者的最大差異在於,http連線使用的是“請求—響應方式
Android 進階12:程序通訊之 Socket (順便回顧 TCP UDP)
不要害怕困難,這是你進步的機會! 讀完本文你將瞭解: 前面幾篇文章我們介紹了 AIDL 、Binder、Messenger 以及 ContentProvider 實現程序通訊的方式,這篇文章將介紹“使用 Socket 進行跨程序通訊”。 在介紹
Android TCP通訊的簡單例項以及常見問題[超時/主執行緒阻塞]
個人更喜歡著眼於例項,從最簡單的開始,一步步進行測試。 理論什麼的先放一邊,把程式跑起來再說。只有跑起來了,才會有動力去繼續往下學,參透整個程式碼的執行機制。 本次的例項目標是—— 模擬一個PC伺服器與android端的通訊,目標是儘量的做到精簡,使程式碼僅留下所需核心部
一篇文章講懂IP資料報分片、組裝以及與TCP/UDP的聯絡
http://www.mamicode.com/info-detail-1465195.html https://blog.csdn.net/leex_brave/article/details/51971053 https://blog.csdn.net/buptzwp/article
【Android開發—智慧家居系列】(四):UDP通訊傳送指令
【Android開發—智慧家居系列】(四):UDP通訊傳送指令 思路回顧 【1】手機連線WIFI模組 【2】UDP通訊對WIFI模組傳送指令,以和WIFI模組保持連線狀態 【3】UDP通訊對WIFI模組傳送指令,讓其搜尋可用的無線網,返回WIFI列表
TCP/UDP區別以及UDP如何實現可靠傳輸
TCP和UDP是OSI模型中的運輸層中的協議。TCP提供可靠的通訊傳輸,而UDP則常被用於讓廣播和細節控制交給應用的通訊傳輸。 UDP(User Datagram Protocol) UDP不提供複雜的控制機制,利用I
第二十七天- 網路通訊協議 TCP UDP 緩衝區
1.網路通訊協議 osi七層模型:按照分工不同把網際網路協議從邏輯上劃分了層級 socket層 2.理解socket: Socket是應用層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,So
Android之UDP協議通訊
最近在做的專案中用到了UDP協議來通訊,整理了一下,可以與PC端網路助手之間進行測試。下面將主要功能程式碼寫在下面供搭建參考: UDPSocketClientManage public class UDPSocketClientManage { // 伺服器IP
java網路通訊之Socket通訊:TCP/UDP
網路通訊三要素:協議,IP,埠。七層協議。 package com.qianfeng.test; /* * 網路程式設計基礎: * 網路的通訊:三要素:協議,IP,埠 * 1.IP:在網路上唯一的標記一臺主機 127.0.0.1 :保留地址/本地地址 java
(C#)TCP與UDP通訊流程、Tcplistener和Tcpclient進行通訊、UdpClient進行通訊
1.基於Tcp協議的Socket通訊類似於B/S架構,面向連線,不同的是伺服器端可以向客戶端主動的推送訊息 流程順序。可靠性高 (1)建立一個套接字(Socket) (2)繫結伺服器端IP地址及埠號-伺服器端 (3)利用Listen()方法開啟監聽-伺服器端 (4)利用Accep