在Android上使用Socket

來源:互聯網
上載者:User

原文地址:http://www.cnblogs.com/kross/p/3621952.html

 

考慮到以後可能要用到這方面的知識,就來寫個Demo嘗試下,其實以前學過,但不記得了……(用不到的東西各種不記得啊)

直接進入正題吧,在Android上使用Socket實際上跟在Java中使用差不多,只要注意下在Manifest中加網路許可權就好了(我原來經常犯這個錯誤),另外網路請求不能再主線程裡,基本就OK了。

そして,先寫一個伺服器的小程式吧。就直接使用Java寫就好了,灰常的簡單,隨便寫寫。

    main(String[] args) =  ServerSocket(5417=  ("waiting for..."==  BufferedReader(

然後我的構想是,手機上有一個輸入框,一個按鈕,使用者可以按按鈕,把輸入框裡的內容發送到伺服器上。一開始我寫了一個很混亂的demo,為了更加方便使用,就把Socket的封裝了一下,就叫SocketManager吧,代碼如下:

  Socket client =      String ip = "113.251.172.30"      port = 5417      SocketManager newInstance()   SocketManager() =       sendMessage(String msg) = 

幾個要點:

1.IP地址就寫Java程式鎖啟動並執行機器的公網地址,cmd->ipconfig就可以查到。

2.連接埠號碼請和伺服器那個保持一致,都不在一個管道裡怎麼通訊哇。

3.我使用了靜態Factory 方法,每次都要重新new一個SocketManager,因為我發現Socket這個類只能用一次,close之後再發送便沒用了。

4.伺服器要收到資訊,必須要用戶端的東西close了,輸出資料流close也好,socket.close也好,總之要close,伺服器才能確切的收到。

然後,我寫了一個線程來執行這個Socket,因為不能在主線程跑嘛,我想了很久,可不可以讓這個線程一直執行著,然後只要調用下這個線程的sendMessage方法,就可以發送了,這樣就只需要new一個線程就行了,但是我想了好久,都想不通,貌似不能那樣,線程要麼沒有,有的話就會一股腦的執行它的run()方法,想要長時間持有它?在run裡面加個while(true)?那怎麼做到調用它的共有方法呢?總之,我沒有想到用只需要new一個線程就可以發N個請求的辦法,貌似需要使用到Service來實現了。

  SocketThread = 

這裡倒沒什麼好說的。接下來我們就直接在MainActivity裡面準備好控制項,監聽器,然後就OK了,大致的看下代碼吧。

  MainActivity  EditText etInput =  Button bSend =  "MainActivity"== SendButtonListener  = Thread(""

OK,代碼就是這樣了,來看下最終的運行效果吧。

先啟動Java的伺服器程式,啟動後結果是這樣的:

然後我們運行手機上的程式,發送一條訊息:

再來看伺服器端的程式:

看上去一切正常,再來一發!

再看看伺服器的程式:

OK,看來是沒有問題了。

 

伺服器如何向Socket返回資訊暫時還沒有去實驗,留著明天來搞吧……

 

原文地址:http://www.cnblogs.com/kross/p/3621952.html

新浪微博:http://weibo.com/KrossFord

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.