android中的socket
1. android serversocket 伺服器該怎麼搭建
在Android中搭建伺服器端,主要涉及到創建ServerSocket和Socket的步驟。具體來說,首先需要創建一個ServerSocket對象,這是伺服器監聽客戶端連接的關鍵。接著,通過ServerSocket對象的accept方法接收來自客戶端的連接請求,返回一個Socket對象,它代表了客戶端與伺服器之間的連接。
接下來,對於已經建立的Socket連接,需要打開連接到Socket的輸入輸出流,以便進行數據的讀寫操作。其中,輸入流用於讀取客戶端發送的數據,輸出流則用於向客戶端發送數據。在進行數據讀寫時,應按照協議約定的數據格式進行操作,確保數據傳輸的准確性和可靠性。
在完成數據讀寫操作後,應關閉輸入輸出流,釋放資源,避免資源泄漏。最後,關閉Socket連接,確保客戶端與伺服器之間的通信完全結束。
需要注意的是,在整個過程中,應確保線程安全,避免多線程環境下並發操作帶來的問題。此外,還需對異常情況進行處理,確保程序的健壯性和穩定性。
總結來說,搭建Android伺服器端的關鍵步驟包括創建ServerSocket和Socket,打開輸入輸出流,按照協議進行讀寫操作,最後關閉流和Socket。這些步驟需要細心操作,確保伺服器能夠穩定地與客戶端進行通信。
2. android 中socket 怎樣建立連接
參考如下內容,建立socker連接:
1.建立Socket連接
1) Socket 實現了TCP/IP協議,可以連接到網路上的上腦,並收發數據
2) ServerSocket 用於服務端,可以監聽服務埠,等待客戶端連接,連接後可以生成用於傳輸數據的Socket
3) 創建服務端
ServerSocket serverSocket = new ServerSocket(9999);
Socket socket = serverSocket.accept(); //等待客戶端連接
4) 創建客戶端
Socket socket = new Socket("100.100.28.26", 9999);
// 注意:注冊網路許可權;不能在主線程做網路連接
5) 客戶端發送消息
DataOutputStream writer = new DataOutputStream(socket.getOutputStream());
writer.writeUTF("嘿嘿,你好啊,伺服器.."); // 寫一個UTF-8的信息
6) 服務端接收消息
DataInputStream reader = new DataInputStream( socket.getInputStream());
String msg = reader.readUTF();
7) 伺服器等待說明
3. 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();
}