Android Socket程式設計幾個概念

2021-07-05 01:11:38 字數 2980 閱讀 7373

//建立伺服器連線

socket socket

=new socket("192.168.1.1", 8080);

//資料報裝

outputstream os

=socket.getoutputstream();

outputstreamwriter osw=new outputstreamwriter(os);

bufferedwriter bw

=new bufferedwriter(osw);

//寫入資料

bw.write("hello world!\r\n\r\n");

//重新整理傳送

bw.flush();

//包裝

inputstream is

=socket.getinputstream();

inputstreamreader isr

=new inputstreamreader(is);

bufferedreader br

=new bufferedreader(isr);

string str

="";

//迴圈讀取

while ((str=br.readline())!=null)

//記得關流

os.close();

is.close();

socket.close();

/*** 那些情況會關流

* 一般我們呼叫socket.close()就會關閉留,但還有其他情況也會關閉socket流

* 1.直接呼叫socket.close();

* 2.只要inputstream和outputstream流有乙個關閉了,則網路連線自動關閉如(inputstream.close();和outputstream.close(););

* 3.在程式退出時網路連線自動關閉

* 4.將socket置為null是,虛擬機器就會**這個物件,所以也會關閉連線。

* 5.在socket被新的socket物件覆蓋也同4那樣關閉連線

* * socket.isclose()可以檢視socket是否已經關閉

* */

//用socket.connect方法連線伺服器

socket socket2

=new socket();

socket2.connect(new inetsocketaddress("192.168.1.1", 8080));

//設定連線超時

socket2.connect(new inetsocketaddress("192.168.1.1", 8080),5000);

/*** 網路連線超時有兩種,連線超時和讀取超時

* * 1.只有通過 socket.connect 方法才能指定連線超時的時間。

* 由於使用 connect 方法連線伺服器必

* 須要指定ip 和埠,因此,無效的 ip 或埠將會丟擲連線超時異常。 

* 2.在連線伺服器成功後,socket 所做的最重要的兩件事就是「接收資料」和「傳送資料」,而在

*接收資料時可能因為網路延遲、網路阻塞等原因,客戶端一直處於等待狀態,當客戶端等待一段時

*間後,如果伺服器還沒有傳送資料到客戶端,那麼客戶端socket 將會丟擲乙個超時異常。 

*我們可以通過socket.setsotimeout方法來設定讀取資料超時的時間。時間的單位是毫秒。這個

*方法必須在讀取資料之前呼叫才會生效。如果將超時時間設為0,則不使用超時時間。也就是說,

*客戶端什麼時候和伺服器斷開,將完全取決於服務端程式的超時設定。如下面的**將讀取資料超

*時時間設為5秒。

* socket socket

=new socket();

* socket.setsotimeout(5000);

* socket.connect(...);

* socket.getinputstream().read();

* 要注意的是不要將設定連線超時和讀取資料超時設定得太小,如果值太小,如100,可能會造

* 成伺服器的資料還沒來得及發過來,客戶端就丟擲超時異常的現象。

* * 

*///設定關閉延遲,有時候在需要關閉連線時還有資料要發就需要設定這個關閉延遲

socket.setsolinger(true, 30000);

//socket的可用選項

//tcpnodelay傳送不延遲,當資料報很小的時候會等待連線到大包上一起

//傳送出去,設定了這個就可以關閉這個功能,立刻傳送出去不延遲

socket.settcpnodelay(true);

//so_reuseaddr設定這個可以使多個socket物件綁在同乙個埠上

socket.setreuseaddress(true);

//so_timeout讀取資料延遲

socket.setsotimeout(5000);

//so_sndbuf預設情況下傳送緩衝大小為8kb,可以在這裡改這個值

socket.getsendbuffersize();

socket.setsendbuffersize(10*1024);

//so_rcvbuf接收緩衝大小,預設也為8kb

socket.getreceivebuffersize();

socket.setreceivebuffersize(10*1024);

//so_keepalive 預設關閉,如果將這個 socket 選項開啟,客戶端 socket 每隔一段時間(大約兩個小時)就會利用空閒的

//連線向伺服器傳送乙個資料報。這個資料報並沒有其他的作用,只是為了檢測一下伺服器是否仍處

//於活動狀態。

socket.setkeepalive(true);

//so_oobinline 如果這個 socket 選項開啟,可以通過 socket 類的 sendurgentdata 方法向伺服器傳送乙個單字

//節的資料。這個單位元組資料並不經過輸出緩衝區,而是立即發出。

Android Socket程式設計

android socket程式設計 建立伺服器的步驟 1.指定埠例項化乙個serversocket。2.呼叫serversocket的accept 以在等待連線期間造成阻塞。3.獲取位於該底層socket的流以進行讀寫操作。4.將資料封裝成流。5.對scoket進行讀寫。6.關閉開啟流。注意 不要...

Android socket程式設計

socket分為兩種 udp和tcp 特點 1.資料要進行打包傳送。2.資料的大包大小有限制 3.面向無連線 4.安全性低不可靠 5.速度快 使用場景 qq群聊 如下 傳送端 public class sendsocket byte bytes line.getbytes 第二步將資料大包,資料報裡...

android Socket 程式設計

socket 通訊 1.udp實現 datagramsocket 客戶端 首先建立乙個datagramsocket物件 datagramsocket socket new datagramsocket 4567 建立乙個inetaddress inetaddress serveraddress in...