導航:首頁 > 編程語言 > android開發之socket編程

android開發之socket編程

發布時間:2022-12-20 09:35:38

1. android socket編程

這是read方法阻塞了。
發送方可以先將文件長度發送到接收方。接收方收到足夠的位元組數後退出while。
或者
發送方發送完畢後發送一個結束標志。接收方收到指定的標志後退出while。
或者
發送方發送完數據並flush後立即關閉socket。關閉socket後接收方的read會返回-1.

估計你的c端在發送完數據後沒有關閉socket連接。如果不需要等待接收端反饋的話可以在發送端立即關閉socket連接。

2. Android Socket通信開發,求詳細過程,附加註釋,謝謝

服務端往Socket的輸出流裡面寫東西,客戶端就可以通過Socket的輸入流讀取對應的內容。Socket與Socket之間是雙向連通的,所以客戶端也可以往對應的Socket輸出流裡面寫東西,然後服務端對應的Socket的輸入流就可以讀出對應的內容。
Socket類型為流套接字(streamsocket)和數據報套接字(datagramsocket)。
Socket基本實現原理
TCP與UDP
1基於TCP協議的Socket
伺服器端首先聲明一個ServerSocket對象並且指定埠號,然後調用Serversocket的accept()方法接收客戶端的數據。accept()方法在沒有數據進行接收的處於堵塞狀態。(Socketsocket=serversocket.accept()),一旦接收到數據,通過inputstream讀取接收的數據。
客戶端創建一個Socket對象,指定伺服器端的ip地址和埠號(Socketsocket=newSocket("172.168.10.108",8080);),通過inputstream讀取數據,獲取伺服器發出的數據(OutputStreamoutputstream=socket.getOutputStream()),最後將要發送的數據寫入到outputstream即可進行TCP協議的socket數據傳輸。

3. Android - Socket簡單使用

ServerSocket類提供如下構造器:

當ServerSocket使用完畢,應使用 close() 方法來關閉此ServerSocket。通常情況下,伺服器不應該只接收一個客戶端請求,而應該不斷接收來自客戶端的請求,所以程序可以通過循環,不斷調用ServerSocket的accept方法:

Socket 常用構造器

註:上面兩個構造器指定遠程主機時既可以使用InetAddress來指定,也可以直接使用String對象來指定遠程IP。本地主機只有一個IP地址時,使用第一個方法更簡單。

在與伺服器進行通訊的時候,無法判斷遠程的伺服器是否斷開連接。如果使用 OutputStream 發送數據則會影響正常的數據發送(無法區分)。所以就引入了一個心跳機制。

心跳機制實現,使用 Socket.sendUrgentData() 方法發送一個位元組流數據(緊急數據)。可以通過判斷服務端的 OOBINLINE 屬性是否打開,來確定是否斷開連接;

setSoTimeout()理解 :設置超時時間;例如:設置為2s,如果阻塞的時間>2s ,那麼就會報錯。

4. android 的socket編程問題!

在你的Android工程下的AndroidManifest.xml里需要加入
<manifest...
<uses-permission android:name="android.permission.INTERNET"/>

...
</manifest>

5. android socket有幾種方法

/***第一種:客戶端Socket通過構造方法連接伺服器***/
//客戶端Socket可以通過指定IP地址或域名兩種方式來連接伺服器端,實際最終都是通過IP地址來連接伺服器
//新建一個Socket,指定其IP地址及埠號
Socket socket = new Socket("192.168.0.7",80);
/***Socket 客戶端 一些常用設置***/
//客戶端socket在接收數據時,有兩種超時:1.連接伺服器超時,即連接超時;2.連接伺服器成功後,接收伺服器數據超時,即接收超時
//*設置socket 讀取數據流的超時時間
socket.setSoTimeout(5000);
//發送數據包,默認為false,即客戶端發送數據採用Nagle演算法
//但是對於實時交互性高的程序,建議其改為true,即關閉Nagle演算法,客戶端每發送一次數據,無論數據包大小都會將這些數據發送出去
socket.setTcpNoDelay(true);
//設置客戶端socket關閉時,close()方法起作用時延遲1分鍾關閉,如果1分鍾內盡量將未發送的數據包發送出去
socket.setSoLinger(true, 60);
//設置輸出流的發送緩沖區大小,默認是8KB,即8096位元組
socket.setSendBufferSize(8096);
//設置輸入流的接收緩沖區大小,默認是8KB,即8096位元組
socket.setReceiveBufferSize(8096);
//作用:每隔一段時間檢查伺服器是否處於活動狀態,如果伺服器端長時間沒響應,自動關閉客戶端socket
//防止伺服器端無效時,客戶端長時間處於連接狀態
socket.setKeepAlive(true);
/*** Socket客戶端向伺服器端發送數據 ****/
//客戶端向伺服器端發送數據,獲取客戶端向伺服器端輸出流
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
//代表可以立即向伺服器端發送單位元組數據
socket.setOOBInline(true);
//數據不經過輸出緩沖區,立即發送
socket.sendUrgentData(65);//"A"
//向伺服器端寫數據,寫入一個緩沖區
//註:此處字元串最後必須包含「\r\n\r\n」,告訴伺服器HTTP頭已經結束,可以處理數據,否則會造成下面的讀取數據出現阻塞
//在write()方法中可以定義規則,與後台匹配來識別相應的功能,例如登錄Login()方法,可以寫為write("Login|test,123 \r\n\r\n"),供後台識別;
bw.write("Login|test,123 \r\n\r\n");
//發送緩沖區中數據,必須有
bw.flush();

/*** Socket客戶端讀取伺服器端響應數據 ****/
//socket.isConnected代表是否連接成功過
if((socket.isConnected() == true) && (socket.isClosed() == false)){//判斷Socket是否處於連接狀態
//客戶端接收伺服器端的響應,讀取伺服器端向客戶端的輸入流
InputStream is = socket.getInputStream();
//緩沖區
byte[] buffer = new byte[is.available()];
//讀取緩沖區
is.read(buffer);
//轉換為字元串
String responseInfo = new String(buffer);
//日誌中輸出
Log.i("TEST", responseInfo);
} //關閉網路
socket.close();
/***第二種:通過connect方法連接伺服器***/
Socket socket_other = new Socket();
//使用默認的連接超時
socket_other.connect(new InetSocketAddress("192.168.0.7",80));
//連接超時2s
socket_other.connect(new InetSocketAddress("192.168.0.7",80),2000);
//關閉socket
socket_other.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

6. Android中Socket編程(二)

LocalServerSocket是屬於Android系統內置的一個類,屬於net包下,類似java中的serversocket類的功能。

這個類比較簡單,構造方法有兩個:

一般使用第一個即可;

本類中方法只有四個,分別是:

查看LocalServerSocket源碼可知:

本類內容比較簡單,主要實現方式都在LocalSocketImpl中,下次分析。

內容基本同LocalScoket,主要功能也是通過LocalSocketImpl實現的。

7. android socket編程

Android是一種基於Linux的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。Android操作系統最初由Andy Rubin開發,主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬體製造商、軟體開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。

8. android socket編程有什麼實例

通常也稱作"套接字",用於描述IP地址和埠,是一個通信鏈的句柄,應用程序通常通過"套接字"向網路發出請求或者應答網路請求。在Internet上的主機一般運行了多個服務軟體,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個埠上,不同的埠對應於不同的服務。 SOCKET用於在兩個基於TCP/IP協議的應用程序之間相互通信。最早出現在UNIX系統中,是UNIX系統主要的信息傳遞方式。在WINDOWS系統中,SOCKET稱為WINSOCK。 兩個基本概念:客戶方和服務方。當兩個應用之間需要採用SOCKET通信時,首先需要在兩個應用之間(可能位於同一台機器,也可能位於不同的機器)建立SOCKET連接,發起呼叫連接請求的一方為客戶方,接受呼叫連接請求的一方成為服務方。客戶方和服務方是相對的,同一個應用可以是客戶方,也可以是服務方。 在客戶方呼叫連接請求之前,它必須知道服務方在哪裡。所以需要知道服務方所在機器的IP地址或機器名稱,如果客戶方和服務方事前有一個約定就好了,這個約定就是PORT(埠號)。也就是說,客戶方可以通過服務方所在機器的IP地址或機器名稱和埠號唯一的確定方式來呼叫服務方。在客戶方呼叫之前,服務方必須處於偵聽狀態,偵聽是否有客戶要求建立連接。一旦接到連接請求,服務方可以根據情況建立或拒絕連接。連接方式有兩種,同步方式(Blocking)和(noBlocking). 客戶方發送的消息可以是文本,也可以是二進制信息流。當客戶方的消息到達服務方埠時,會自動觸發一個事件(event),服務方只要接管該事件,就可以接受來自客戶方的消息了。

9. android socket編程

我上周也在試網路下載問題,遇到你同樣的問題,我也是剛解決,這個下載要放在線程中,
而不能在主線程中;產生線程的框架是:
new Thread(new Runnable()
{
public void run()
{
// 下載程序片段
}
}).start();
唯一沒有試好的消息處理機制,也就是下載完成後的通知。

10. Android 網路編程之Socket理解

TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網路間實現信息傳輸的協議簇。TCP/IP協議不僅僅指的是 TCP 和 IP 兩個協議,而是指一個由 FTP 、 SMTP 、TCP、 UDP 、IP等協議構成的協議簇, 只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議。

互聯網進行通信時,需要相應的網路協議,TCP/IP 原本就是為使用互聯網而開發制定的協議族。因此,互聯網的協議就是 TCP/IP,TCP/IP 就是互聯網的協議。所以不要簡單認為TCP/IP協議就是我們的網路請求http拿點東西,它是一個統稱。

socket 的誕生是為了應用程序能夠更方便的將數據經由傳輸層來傳輸,所以它本質上就是對 TCP/IP 的運用進行了一層封裝,然後應用程序直接調用 socket API 即可進行通信。那麼它是如何工作的呢?它分為 2 個部分,服務端需要建立 socket 來監聽指定的地址,然後等待客戶端來連接。而客戶端則需要建立 socket 並與服務端的 socket 地址進行連接。

有圖可以看出Socket是應用層跟傳輸層的橋梁,應用層通過socket api提供的方法來讓數據流轉到傳輸層。

閱讀全文

與android開發之socket編程相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:485
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163