第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

返回連接的套接字返回空

返回連接的套接字返回空

偶然的你 2022-11-30 11:24:18
我正在嘗試在 android 上創(chuàng)建一個客戶端-服務(wù)器應(yīng)用程序。我想要一個初始化套接字并將其返回給主類的類。我在創(chuàng)建和連接套接字時沒有任何問題(我的服務(wù)器正在正確處理連接)但是當(dāng)我嘗試將創(chuàng)建的套接字返回到主類時它是空的。我錯過了什么?我試過使用 AsyncTask。這是主類的代碼:public class MainActivity extends AppCompatActivity {    private Socket socket;    private SocketHandler sH;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sH = new SocketHandler();        sH.start();        socket = sH.getSocket();        if(socket == null){             System.out.println("null");        }else{            System.out.println("not null");        }    }}這是初始化套接字的類的代碼:public class SocketHandler extends Thread {    private Socket socket;    public Socket getSocket(){        return socket;    }    @Override    public void run(){        try{            socket = new Socket("192.168.0.4", 9999);        }catch (IOException e){            e.printStackTrace();        }    }}
查看完整描述

1 回答

?
郎朗坤

TA貢獻1921條經(jīng)驗 獲得超9個贊

線程是并行運行的,這意味著不能保證你的套接字連接會立即完成,但你錯誤地假設(shè)并且你踩到了經(jīng)典的競爭條件,因為此時你調(diào)用getSocket()連接仍在建立(但這個過程還沒有尚未完成),因此socket變量仍然null是在創(chuàng)建SocketHandler.

getSocket()您需要同步代碼,執(zhí)行回調(diào)或(出于測試目的)在調(diào)用或讀取幾次之前稍等片刻(即在循環(huán)中+一些延遲/超時,除非套接字值不是null(但請注意,您需要期望null如果套接字連接失敗也是有效值)。

另外,如果在單獨的線程中創(chuàng)建,為什么要在主線程中讀取套接字?你不應(yīng)該在那個線程中做所有的套接字工作嗎?


查看完整回答
反對 回復(fù) 2022-11-30
  • 1 回答
  • 0 關(guān)注
  • 78 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號