當前位置:首頁 » 安卓系統 » androidsocket地址

androidsocket地址

發布時間: 2022-05-30 06:17:12

『壹』 在android開發中進行socket通信時android虛擬機端的ip地址是多少

用過真機做過實驗,因為不知道虛擬機怎麼獲取i埠,用真機的話,有一個函數可以直接獲取本機的ip地址(用的是wifi)埠直接設定就可以。函數是:String hostIPAddress = getLocalIPAddress();還有一點就是虛擬機不支持wifi,要是用虛擬機進行測試的話,要設置android.permission.INTERNET許可權才能模擬進行網路連接。(也可以用這個來模擬wifi連結)。

『貳』 請問下,android能不能直接通過手機IP進行socket通信,不是局域.

可以的,只要通信的IP是通的就行了。
有兩種方案:
1、在PC機上建立伺服器,手機與手機之間的通信通過伺服器進行中轉
2、一部手機作為伺服器,另一部手機作為客戶端接入該手機
一般是第一種方案
1、pc端:
serverSocket=new ServerSocket(5648); //在5648埠進行偵聽
Socket sk = serverSocket.accept();//如果有接入,則創建對應的socket;
2、手機端:
socket=new Socket("tobacco5648.xicp.net",5648);//連接socket
3、消息輸入輸出:
pw=new PrintWriter(socket.getOutputStream()); //消息輸出
pw.println("發送消息");
pw.flush();
br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //消息接收
while((str=br.readLine())!=null){
//接收消息
}

『叄』 android問題兩個手機socket通信ip地址寫什麼

寫另一個的呀,不過這樣一般不太好做,可以做成一個伺服器,兩個手機先連上伺服器,然後再互聯通訊。可以看一下打洞原理

『肆』 在android開發中,進行socket通信時,android虛擬機端的ip地址是多少

一般ip都是你自己的伺服器的地址,假如是自己的伺服器,就寫自己的地址,埠一般是8888

『伍』 安卓socket編程的伺服器端的地址是什麼

服務端的地址就是你伺服器運行的電腦的ip地址,伺服器運行在哪個電腦,那個電腦的ip就是你伺服器端的地址。
使用socket編程的話創建伺服器端的時候一般都是ServerSocket來創建一個對象,通過new構造函數的時候傳入一個埠號,客戶端連接的時候除了使用伺服器端ip還有這個埠號,創建了對象之類,開啟無限循環,用這個對象調用accept()方法,這就是常說的心跳連接,這個方法會一直阻塞,直到有客戶端連接上。
客戶端連接的時候也需要創建Socket對象,實例化這個對象的時候就需要傳入伺服器端ip和埠號,然後就可以利用這個對象獲取輸入輸出流與伺服器交互。
同樣伺服器端的ServerSocket對象調用accept()方法返回的Socket對象也可以獲取輸入輸出流對象,然後利用這些流與客戶端交互。

『陸』 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數據傳輸。

『柒』 android socket 編程中,本機IP與虛擬機IP分別是多少

Socket(套接字)是一種抽象層,應用程序通過它來發送和接收數據,就像應用程序打開了一個文件句柄,將數據讀寫到穩定的存儲器上一樣。使用Socket可以將應用程序添加到網路中,並與處於同一網路中的其他應用程序進行通信。一台計算機上的應用程序向socket寫入的信息能夠被另一台計算機上的另一個應用程序讀取,反之依然。根據不同的的底層協議實現,也會很多種不同的Socket。本課當中只覆蓋了TCP/IP協議族的內容,在這個協議族當中主要的Socket類型為流套接字(stream socket)和數據報套接字(datagram socket)。流套接字將TCP作為其端對端協議,提供了一個可信賴的位元組流服務。數據報套接字使用UDP協議,提供可一個「盡力而為」的數據報服務,應用程序可以通過它發送最長65500位元組的個人信息。


  1. 使用基於TCP協議的Socket

    一個客戶端要發起一次通信,首先必須知道運行伺服器端的主機IP地址。然後由網路基礎設施利用目標地址,將客戶端發送的信息傳遞到正確的主機上,在java中,地址可以由一個字元串來定義,這個字元串可以使數字型的地址(比如192.168.1.1),也可以是主機名(example.com)。
    在Java當中InetAddress類代表了一個網路目標地址,包括主機名和數字類型的地址信息。


  2. 使用基於UDP的Socket

    1.創建DatagramPacket
    DatagramSocket(byte [] data,int offset,int length,InetAddress remoteAddr,int remotePort)該構造函數創建一個數據報文對象,數據包含在第一個參數當中
    2.創建DatagramSocket創建
    DatagramSocket(int localPort)以上構造函數將創建一個UDP套接字;
    3. DatagramSocket:發送和接受
    void send(DatagramPacket packet)
    void receive(DatagramPacket packet)
    send()方法用來發送DatagramPacket實例。一旦創建連接,數據報將發送到該套接字所連接的地址;
    receive()方法將阻塞等待,知道接收到數據報文,並將報文中的數據復制到指定的DatagramPacket實例中


  3. Android 模擬器中做埠重定向

    android的模擬器有個特點,就是訪問網路的時候只可以從模擬器主動往出去連。但是卻無法主的從外面連接模擬器,這個特點和NAT幾乎完全一樣,具有單向連接的特性。 實際開發中我們希望模擬器像一台獨立的手機一樣,能和處於同一區域網中的手機進行端對端的通信。這時就需要做埠重定向。 類似於給路由器做nat的埠重定向。


  4. 運行模擬器:你會發現模擬器標題欄上寫著埠號:5554,其實這個埠號是模擬器的console埠 >telnet到模擬器的console口上:telnet localhost 5554在控制台下輸入 redir add tcp:6668:9998 就完成了從主機6668埠重定向到模擬器9998埠的任務


  5. 建議使用Android 手機進行調試,在模擬器使用java socket會遇上很多連接不上的問題,這些都是模擬,才導致的

『捌』 android socket怎麼獲得ip地址

TCP Socket的代碼
[java] view plain
class TCPThread extends Thread {
@Override
public void run() {
Log.i("juetion", "TCPThread runing");
int i = 0;
while (!this.isInterrupted()) { //判斷是否中斷線程
ServerSocket serverSocket = null;//聲明一個ServerSocket對象
Log.i("juetion", "TCPThread run times:" + (i));
i++;
try {
serverSocket = new ServerSocket(12345);//創建一個ServerSocket對象,並在12345埠監聽
Socket socket = serverSocket.accept();//接受客戶端發送的請求
InputStream inputStream = socket.getInputStream();//獲取數據流
byte buffer[] = new byte[1024 * 4];
int temp = 0;
while ((temp = inputStream.read(buffer)) != -1) {
Log.i("juetion", new String(buffer, 0, temp)); //數據輸出
}
} catch (IOException e) {
e.printStackTrace();
}
try {
Log.i("juetion", "serverSocket close");
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
UDP Socket 的代碼:
[java] view plain
class UDPThread extends Thread {
@Override
public void run() {
Log.i("juetion", "UDPThread runing");
int i = 0;
while (!this.isInterrupted()) {//判斷是否中斷線程
DatagramSocket datagramSocket = null;//聲明DatagramSocket對象
Log.i("juetion", "UDPThread run times:" + (i));
i++;
try {
datagramSocket = new DatagramSocket(12345);//創建對象,並監聽12345埠
byte data[] = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(data, data.length); //獲取數據包
datagramSocket.receive(datagramPacket);//接受數據
Log.i("juetion", "" + new String(datagramPacket.getData(), datagramPacket.getOffset(), datagramPacket.getLength()));//數據輸出
} catch (Exception e) {
e.printStackTrace();
}
Log.i("juetion", "datagramSocket close");
datagramSocket.close();
}
}
}

『玖』 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連接)

其實跟電腦差不多了,android里調用socket的方法,拿到socket後就可以發送數據並接收數據。

我最近正在做android方面的通信,真的想把完整的代碼都給你,可是沒辦法,公司機密。。

給你我的socket連接類吧。。。

package sean.socket;

///////////把MyType的一些方法替換成Writer的方法
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import sean.Sysout;
import sean.business.BusinessCenter;
import sean.business.LoginManager;
import sean.format.MyType;
import sean.io.Reader;
import sean.transfer.BytesBuffer;
import sean.transfer.DataCenter;

public class SocketThread implements Runnable {

String Server = "";
int Port = 0;
static Socket cs = null;
// Thread ioThread=null;
static boolean bool_SocketThread = false;
static OutputStream output = null;

public SocketThread(String server, int port) {
Server = server;
Port = port;
bool_SocketThread = true;
}

@Override
public void run() {
// TODO Auto-generated method stub
while (bool_SocketThread) {
try {
// if (cs == null) {
DataCenter.setBool_Login(false);// 設置登錄失敗
Sysout.println("正在嘗試連接ClientSocket...", Sysout.TempOutDebug);
cs = new Socket(InetAddress.getByName(Server), Port);
if (cs != null) {
Sysout.println("ClientSocket連接成功!__" + cs,
Sysout.TempOutDebug);
cs.setKeepAlive(true);//讓socket保持活動狀態

InputStream input = cs.getInputStream();
output = cs.getOutputStream();
BusinessCenter.sendLoginData();

BytesBuffer bBuffer = new BytesBuffer();
byte[] Buffer = new byte[1024];
int ReadBytes = input.read(Buffer);
while (ReadBytes != -1) {
Sysout.println("已讀取" + ReadBytes + "個位元組到緩沖區",
Sysout.TempOutDebug);
byte[] b = new byte[ReadBytes];
b = MyType.BytesInsertToBytes(Buffer, b, 0);
Reader r = new Reader(b);
Sysout.println(r.toString() + "____ReadBytes=="
+ ReadBytes, Sysout.TempOutDebug);
bBuffer.InsertToBuffer(Buffer, ReadBytes);
ReadBytes = input.read(Buffer);
}
} else {
Sysout.printException("ClientSocket連接失敗!請確認網路正常且伺服器已開啟。");
}
// }
// 執行到這里說明inputstream.read()已中斷,說明socket已斷開連接
// cs=null;
LoginManager.setLoginValue(-1);// 業務中心登錄注銷,即登錄管理器注銷登錄
DataCenter.setBool_Login(false);// 數據中心登錄注銷
Sysout.printException(cs + "已斷開。");
Thread.sleep(2 * 1000);// 睡眠2秒後繼續循環

// try {
// // 判斷ClientSocket是否已斷開
// cs.sendUrgentData(0);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// Sysout.printException("ClientSocket已斷開,重新連接。"+e);
// cs.close();
// cs = null;
// }
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
Sysout.printException("SocketThread.java====解析伺服器名稱發生異常!" + e);
// e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Sysout.printException("SocketThread發生IO異常,異常消息:" + e);
try {
if (cs != null) {
Sysout.println("准備關閉" + cs, Sysout.TempOutDebug);
cs.shutdownOutput();
cs.shutdownInput();
cs.close();
cs = null;
output = null;
LoginManager.setLoginValue(-1);// 業務中心登錄注銷,即登錄管理器注銷登錄
DataCenter.setBool_Login(false);// 數據中心登錄注銷
Sysout.println(cs + "已關閉。", Sysout.TempOutDebug);
}
try {
Thread.sleep(5000);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
Sysout.printException("SocketThread.java====線程睡眠異常!!"
+ e2);
// e2.printStackTrace();
}
String ExceptionInfos=e.toString();
if(ExceptionInfos.endsWith("Connection refused")){
stopSocketThread();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
Sysout.printException(cs + "關閉發生異常::" + e1);
// e1.printStackTrace();
try {
Thread.sleep(5000);
} catch (InterruptedException e2) {
// TODO Auto-generated catch block
Sysout.printException("SocketThread.java====線程睡眠異常!!"
+ e2);
// e2.printStackTrace();
}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}// while(bool_SocketThread)
Sysout.println("SocketThread已停止。", Sysout.TempOutDebug);
}

public static Socket getSocket() {
return cs;
}

// public void setBool(boolean bool0) {
// bool_SocketThread = bool0;
// }

public static OutputStream getOutputStream() {
return output;
}

public static void stopSocketThread() {
try {
// 停止SocketThread線程,必須先把循環的標志bool_SocketThread置為false,否則可能繼續循環,重新建立socket連接
bool_SocketThread = false;
// 關閉socket
if (cs != null) {
cs.shutdownOutput();
cs.shutdownInput();
cs.close();
cs = null;
output = null;

Sysout.println("ClientSocket已被強制關閉。");
// LoginManager.setLoginValue(-1);// 業務中心登錄注銷,即登錄管理器注銷登錄
// DataCenter.setBool_Login(false);// 數據中心登錄注銷
// byte[] lock=LoginActivity.getLock();
// synchronized(lock){
// lock.notify();
// }
}
} catch (IOException e) {
// TODO Auto-generated catch block
Sysout.printException("強制關閉" + cs + "發生異常::" + e);
// e.printStackTrace();
}
}

}

必須先在android里啟動一個服務,由服務去啟動這個socket線程,因為如果是UI去啟動的話,頁面會卡住。。。

熱點內容
linux查看掛載的存儲 發布:2025-08-21 03:41:34 瀏覽:842
cryptopythonrsa 發布:2025-08-21 03:36:29 瀏覽:674
androidmandroidn 發布:2025-08-21 03:31:50 瀏覽:211
為什麼不能把安卓桌面app設為默認 發布:2025-08-21 03:22:31 瀏覽:442
愛奇藝會員密碼哪裡設置 發布:2025-08-21 03:11:57 瀏覽:262
電信電話密碼是什麼 發布:2025-08-21 03:08:14 瀏覽:446
sqlserver自動收縮 發布:2025-08-21 03:07:28 瀏覽:685
微信伺服器開哪個地址 發布:2025-08-21 03:06:12 瀏覽:652
diy源碼 發布:2025-08-21 02:42:36 瀏覽:480
信息存儲與信息檢索 發布:2025-08-21 02:22:32 瀏覽:122