當前位置:首頁 » 安卓系統 » androidsocket代理伺服器

androidsocket代理伺服器

發布時間: 2022-08-06 12:37:33

❶ 安卓基於socket的伺服器通信為什麼不可以

1. PC伺服器啟用ServerSocket
兩個通信實體在建立虛擬鏈路之前,需要有一方先准備好,主動接受來自其他通信實體的連接請求。
使用ServerSocket對象監聽來自客戶端的Socket連接。
//創建ServerSocket對象

ServerSocket ss = new ServerSocket(30000);
//監聽來自客戶端的請求
while(true){
Socket s = ss.accept();

}

如果沒有連接,則將一直處於等待狀態。當接收到連接請求後,獲取消息到輸入流,並保存到文件。
//接收客戶端消息

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str;

BufferedWriter bw = new BufferedWriter(new FileWriter("D:/ApInfo"+ (i++) +".txt"));
while ((str = in.readLine()) != null) {
System.out.println(str);
bw.write(str);
bw.newLine();
}

2. Android終端使用Socket通信
客戶端使用Socket的構造器連接伺服器,指定伺服器IP和埠號就可以了。
Socket s = new Socket(「192.168.1.100」, 30000);
這樣伺服器端的accept()方法就得到響應,從而向下執行,伺服器端和客戶端就形成了一對互相連接的Socket。再進行通信時就沒有伺服器和客戶端之分了,都是通過輸入輸出流進行通信。
詳細步驟:
採用Handler和TimerTask來定時掃描AP信息並發送給伺服器端。TimerTask規定了到達指定的時間所要進行的任務。
TimerTask task = new TimerTask(){

public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}

};

handler傳遞message內容:
Handler handler = new Handler(){

public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
// 執行定時器時間到了之後由handler傳遞的任務
break;
}
super.handleMessage(msg);
}

}
接下來掃描AP信息並發送給伺服器端,然後將結果保存。
WifiManager wifiManager=(WifiManager) getSystemService(WIFI_SERVICE);
wifiManager.startScan();
mWifiList = wifiManager.getScanResults();

由WifiManager說明可知,它可以用於處理已配置的網路,當前連接的網路及AP信息的掃描等情況。
向伺服器發送消息:
socket = new Socket("192.168.1.211",30000);
//向伺服器端發送消息
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message);

其中message為獲取的AP信息,測試收到的信息格式為:
SSID: ICIS_LAB, BSSID: 1c:af:f7:9a:65:e4, capabilities: [WPA-PSK-TKIP+CCMP], level: -80,frequency: 2437

❷ 自己寫了一個Android的APP,想用socket連接伺服器

最近我在在寫一個APP,用到了socket,在自己電腦上搭建的伺服器,具體過程: 用eclipse寫Java代碼,創建一個serversocket,用來監聽客戶端的請求; 客戶端在發送數據前,首先創建一個Socket,然後直接請求伺服器即可。自己寫了一個Android的APP,想用socket連接伺服器

❸ android socket 服務端問題

最近剛學習了android socket
根據我的理解以及參考到的一些代碼,要實現點對點傳輸數據,向指定客戶端傳信息,的確就是通過內存上保存的socket。
你所擔心的上萬個客戶端同時連接,是不應該發生在用手機作為伺服器的情況下的,不然就是設計錯誤。(就是如果設計一個需要響應上萬連接的話,伺服器就不應該用手機)。
等待連接後無響應大概是你實現的有問題,等待連接不要把主線程給block住了。

❹ android 的 Socket 和伺服器ServerSocket 一直無法連接

你可能是這個問題;Android4.0版本以上不能在主線程中訪問socket的解決辦法
在oncreate方法中加入
if (Build.VERSION.SDK_INT >= 11) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads ().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
}

❺ Android socket 連不上伺服器

NetworkOnMainThreadException 你的網路請求應該放在一個單獨的線程中去執行,不能放在mainThread 也就是ui線程。

❻ android serversocket 伺服器該怎麼搭建

伺服器端是需要用ServerSocket的:

1創建ServerSocket和Socket
2打開連接到Socket的輸入輸出流
3按照協議進行Socket進行讀寫操作
4關閉輸入輸出流,關閉Socket

❼ 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();
}

❽ Android socket連接伺服器未響應

你確定你的電腦的8080這個埠沒有被其他程序佔用,或者你的伺服器程序啟動了嗎,伺服器程序要在客戶端程序啟動前啟動,並且伺服器要一值監聽你設置的這個埠。你上面的程序別忘了關閉IO流和socket。

❾ android 用socket連接伺服器,報出異常怎麼解決

暈,樓主你是不是不理解異常是什麼意思啊...異常就是程序執行遇到錯誤了。捕獲之後,如果是已知錯誤,就想辦法處理掉,繼續運行;要不就直接把錯誤信息列印到Log里,退出程序。這樣捕獲了,又不處理,接著運行自然會出錯的。

熱點內容
sqlserver無法啟動 發布:2024-05-04 01:37:19 瀏覽:847
php使用正則 發布:2024-05-04 01:36:12 瀏覽:118
玉石密度演算法 發布:2024-05-04 01:24:49 瀏覽:333
我的世界雲伺服器怎麼樣 發布:2024-05-04 01:20:01 瀏覽:21
androidsdk包含 發布:2024-05-04 00:45:54 瀏覽:208
android拷貝文件 發布:2024-05-04 00:38:28 瀏覽:776
存儲冗餘比 發布:2024-05-04 00:12:58 瀏覽:404
oracle資料庫存儲原理 發布:2024-05-04 00:10:40 瀏覽:523
未拆封玩客雲3怎麼搭建伺服器 發布:2024-05-04 00:06:11 瀏覽:797
徹底刪除編譯安裝的文件 發布:2024-05-04 00:05:33 瀏覽:55