日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 两个客户端间的通信(Socket通信)

發(fā)布時(shí)間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 两个客户端间的通信(Socket通信) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

?

客戶端之間通信:??? 實(shí)際上兩個(gè)客戶端不能直接通信,要借助服務(wù)器來做為中轉(zhuǎn)站,才能實(shí)現(xiàn)雙方通信。

??????????????? 一個(gè)客戶端發(fā)送數(shù)據(jù)到服務(wù)器,服務(wù)器將數(shù)據(jù)發(fā)送給(所有連接上服務(wù)器的)客戶端,這樣客戶端之間實(shí)現(xiàn)了通信。

服務(wù)器的代碼:

public class PcService {
????????????private static final int SERVICEPORT=10086;
?????????? ?private static ArrayList<Socket> mClientList=new ArrayList<Socket>(); //記錄連接上服務(wù)器的客戶端
????????????private ExecutorService mExecutorService;???????????????????????????? //創(chuàng)建線程池來管理
??????????? private ServerSocket serverSocket;
?????????? ?public static void main(String[] args) {
????????????????? new PcService();
??????????? ?}
?????????? public PcService() {
?????????????? ?try {
???????????????????? serverSocket=new ServerSocket(SERVICEPORT);
???????????????????? mExecutorService=Executors.newCachedThreadPool();??
????????????????? ? Socket? clientSocket=null;
??????????????????? while(true){? //一接受到客戶端發(fā)送來的數(shù)據(jù),立刻將信息轉(zhuǎn)發(fā)給所有連接在線的客戶端
????? ????????????????? clientSocket=serverSocket.accept();
????????????????????????mClientList.add(clientSocket);
?????????????????????? ?mExecutorService.execute(new ThreadServer(clientSocket));
??????????????????? }
????????????? ?}
???????????? ?catch (Exception e) {
????????????????? ??e.printStackTrace();
???????????? ?}
????????}
?

?


?????? static class ThreadServer implements Runnable{
???????????? ?PrintWriter printWriter;
?????????? ?? BufferedReader bufferedReader;
???????????? ?String message;
?????????? ?? Socket socket;

????????????? public ThreadServer(Socket socket) throws IOException {
?????????????? ???? this.socket=socket;
??????????????????? bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
????????????????????message=this.socket.getInetAddress()+"";
??????????????????? sendMessageToClient();
???????????? ?}
???????????? public void run() {
?????????????? ?try {
???????????????? ??while((message=bufferedReader.readLine())!=null){
??????????????????????if(message.trim().equals("exit")){//當(dāng)一個(gè)客戶端退出時(shí)
?????????????????????????? ?mClientList.remove(socket);
??????????????????????????? bufferedReader.close();

????????????????????????????printWriter.close();
????????????????????????? ??socket.close();
???????????????????????? ?? sendMessageToClient();
??????????????????????????? ?break ;
???????????????? ??? }
???? ??????????????? else{
???????????????????????? ?message=socket.getInetAddress()+"";
???????????????????????? ?sendMessageToClient();
??????????????????? ?}
???????????????? ?}
????????????? }
??????????? ?catch (Exception e) {
?????????????????? e.printStackTrace();
?????????????}
???
????????}
??
???????? //發(fā)送消息給每一個(gè)連接的客戶端
????????private void sendMessageToClient(){
??????????? try {
??????????????? for(Socket? client:mClientList){
?????????????????? printWriter=new PrintWriter(client.getOutputStream());
???????????????? ? printWriter.println( message );
???????????? ?? }
???????????}
???????? ?catch (Exception e) {
???????????? e.printStackTrace();
????????? }
?????? ?}
??
??}
}

?

?

監(jiān)控TCP的狀態(tài): 心跳包

?? 做法:一個(gè)單獨(dú)線程(心跳線程),來維護(hù)tcp的連接。
??????? 每隔一個(gè)時(shí)間就向服務(wù)器/客戶端發(fā)送一段連接信息,當(dāng)對方接受到后馬上回復(fù)對方。然后設(shè)置一個(gè)超時(shí)時(shí)間

?????? ,過個(gè)時(shí)間就反復(fù)發(fā)幾次。如果沒有收到回復(fù),則判定tcp斷開了。

??????? 用心跳包來維護(hù)連接,在發(fā)送心跳包異常時(shí),可以認(rèn)為對方短線,

??????? 或者指定時(shí)間超時(shí)后,未收到對方的心跳響應(yīng),也認(rèn)為是對方短線。
?????? ?或者就是Send的時(shí)候會(huì)直接報(bào)異常,可以直接認(rèn)為是掉線了。

轉(zhuǎn)載于:https://my.oschina.net/u/2406195/blog/508768

總結(jié)

以上是生活随笔為你收集整理的android 两个客户端间的通信(Socket通信)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。