當前位置:首頁 » 安卓系統 » androidtcp通信

androidtcp通信

發布時間: 2022-05-27 11:40:14

① android怎麼實現tcp數據傳輸

Socket s = new Socket("192.168.1.1",5200)//"ip",port
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
InputStream in = s.getInputStream();
byte[] b = new byte[in.available];
in.read(b);
String str = new String(b);
out.print("收到"+s);
out.flush();

② 請問開發android的朋友,怎麼樣在tcp socket中建立長連接,好像只能在線程里建立連接,線程關閉了就斷了。

後台開啟一個線程一直運行,每隔1分鍾左右發送一個心跳報文給伺服器,以確保時刻跟伺服器鏈接。若超過3次伺服器未對客戶端發送的心跳報文做出回應則重新鏈接。 如果這么作的話,必須確保和伺服器達成一定的應用層協議。

③ 關於Android tcp連接

安卓的主線程中是不能用耗時性的操作讀寫,所以,把SOCKET讀寫操作都要放到線程中。
可以用即時線程的辦法。參考我的SOCKET客戶端。

//--------Socket服務端----------------------
void dispClients()
{ //顯示所有客戶
int n=vector.size();
String ss="\n"+n+" clients:\n";
for (int i=0;i<vector.size();i++)
{
Socket sk=vector.get(i);
String ip=sk.getInetAddress().toString();
String port=""+sk.getPort();
ss+=""+ip+","+port+"\n";
}
textView1.setText(ss);
}
void writeSocket(Socket sk,String s)
{ // 向客戶端Socket發字元串
DataOutputStream outf;
try
{
outf=new DataOutputStream(sk.getOutputStream());
if (!sk.isClosed())
outf.writeUTF(s);
}
catch(Exception e)
{
try
{
setTitle("err");
sk.close(); // 對方已關閉
}
catch(Exception e1)
{
}
}
}
void writeSock(final Socket sk,final String s)
{ // 子線程中向客戶端Socket發字元串
new Thread(new Runnable()
{
@Override
publicvoid run()
{
writeSocket(sk,s);
}
}).start();
}
void sendAll(final String s)
{ // 向所有管理中的客戶Socket發串
boolean del=false;
for (int i=0;i<vector.size();i++)
{
Socket sk=vector.get(i);
if (sk.isClosed())
{
vector.remove(i); // 已斷開的連接
del=true;
}
else
writeSock(sk,s);
}
if (del)
{ // 客戶端有變化,通知主程序刷新顯示
Message msg=sHandler.obtainMessage(0,"");
sHandler.sendMessage(msg);
}
}

void readSocket(Socket sk)
{ // 服務端讀Socket
DataInputStream inf;
try
{
inf=new DataInputStream(sk.getInputStream());
while(sk.isConnected() && !sk.isClosed())
{
String s=inf.readUTF();
if (s.length()>0)
{ // 讀到字元串後,通知主程序處理
String ip=sk.getInetAddress().toString();
String port=""+sk.getPort();
s=ip+","+port+":"+s+"\n";
Message msg=sHandler.obtainMessage(1,s);
sHandler.sendMessage(msg);
}
}
}
catch(Exception e)
{
}
}
void readSock(final Socket sk)
{ // 子線程中讀
new Thread(new Runnable()
{
@Override
publicvoid run()
{
readSocket(sk);
}
}).start();
}

void listen(ServerSocket ssk) // 接受多個客戶端連接請求
{
while (!ssk.isClosed())
try
{
Socket sk=ssk.accept();
vector.add(sk); // 有客戶連接
readSock(sk);
// 通知刷新客戶列表
Message msg=sHandler.obtainMessage(0,"");
sHandler.sendMessage(msg);
}
catch(Exception e)
{
}
}
void listen() // 線程接受多個客戶端連接請求
{
new Thread(new Runnable()
{
@Override
publicvoid run()
{
listen(serverSocket);
}
}).start();
}

//---------Socket客戶端----------------------------------
cHandler=new Handler()
{ // 客戶端消息處理器
@Override
public void handleMessage(Message msg)
{
String s=msg.obj.toString();
textView2.append(s);
}
};
clientRead("127.0.0.1",9003);
// clientRead("10.0.2.15",9003);

textView2=(TextView)findViewById(R.id.textView2);
textView2.setText("");
editText1=(EditText)findViewById(R.id.editText1);
button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
try
{
String s=editText1.getText().toString();
writeSock(clientSocket,s);
}
catch(Exception e)
{
}
} //public
});
button2=(Button)findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
try
{
clientSocket.close();
String s="中華人民共和國";
Message msg=sHandler.obtainMessage(1,s);
sHandler.sendMessage(msg);
}
catch(Exception e)
{
}
} //public
});

}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{ // 按返回鍵的退出處理
if (keyCode == KeyEvent.KEYCODE_BACK )
{
try
{ // 防止出現埠已綁定的錯誤
serverSocket.close();
finish();
System.exit(0);
}
catch(Exception e)
{
}
}
return(false);
}

④ android中的tcp udp需要許可權嗎

android中的tcp和udp不需要任何許可權。因為它們都是網路通訊協議的一種,只要手機沒有問題,能夠上網,就可以使用TCP和UDP協議了。
TCP/IP是用於電腦通信的一組協議,我們通常稱之為TCP/IP協議族,它是七十年代中期美國國防部為其ARPANET廣域網開發的網路體系結構和協議標准,以它為基礎組建的Internet是目前國際上規模最大的電腦網路,正因為Internet的廣泛使用,使得TCP/IP成了事實上的標准。之所以說TCP/IP是一個協議族,是因為TCP/IP協議包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等許多協議,這些協議統稱為TCP/IP協議。
TCP/IP協議的名字實際上是來自最重要的兩個協議,TCP(傳輸控制協議)和IP(網際協議)。它負責把需要傳輸的信息分割成許多小包,也叫做信息包,然後把這些信息包發往目的地,它能有效地保證傳輸的安全性和正確性。
在Internet內部,信息不是以一個恆定的流從主機傳送到主機,而是把數據分解成小包,即數據包進行傳送。例如你傳送一封很長的信件給你的朋友,TCP就可以把這些信息分成很多個數據包,每個數據包用一個序號和一個接收地址來標定。此外,TCP還插入一些糾錯信息。
接著數據包被傳過網路,這就是IP的工作,即把它們傳送給遠程主機。在另一端,TCP接收到數據包並核查錯誤。如果有錯誤發生,TCP可以要求重發這個特定的數據包。只要所有的數據包都被正確地接收到,TCP將用序號來重新構造原始信息。換句話說,IP的工作是把原始數據從一地傳送到另一地,TCP的工作是管理這種流動並確保其數據是正確的。ß把數據分解成數據包有很多好處。首先,它允許Internet讓很多不同的用戶在同一時刻使用同一通訊線路。因為這些數據包不必一起輸送,所以通訊線路可以載著所有類型的數據包按它們自己的路徑從一地到另一地。就如一條高速公路上各個汽車都在公路上行駛。ß用數據包傳輸的另一個好處是:當某處出錯,只需重新傳送單個數據包,而不是整個信息,這樣會大大加快Internet的傳輸總速度。
TCP/IP是把電腦和通訊設備組織成網路的協議大家庭,兩個最重要的協議是TCP和IP。IP從一地到另一地傳輸數據,而TCP則保證它們都正確地工作。
目前,遍布世界范圍的Internet網路主要採用的就是TCP/IP協議,而且,國內大多數網路建設現在已朝著TCP/IP協議的方向發展。

⑤ android設備怎麼設置tcpip

1. 使用USB數據線連接設備(此方法需配置adb環境變數,也可直接進入adb工具目錄執行\android-sdk-windows\platform-tools\)。
2. 命令輸入adb tcpip 5555 ( 5555為埠號,可以自由指定)。
3. 斷開 USB數據,此時可以連接你需要連接的USB設備。
4. 再命令輸入 adb connect <設備的IP地址>:5555
後面就可以使用ADB ,DDMS 來調試Android應用或顯示Logcat 消息。
5. 如果需要恢復到USB數據線,可以在命令行輸入adb usb
註: Android設備的IP地址可以通過(設置->關於手機->狀態信息)查看

⑥ Android伺服器通信的幾種方式詳解

大 學學習網路基礎的時候老師講過,網路由下往上分為物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。通過初步的了解,我知道IP協議對應於網 絡層,TCP協議對應於傳輸層,而HTTP協議對應於應用層,三者從本質上來說沒有可比性,socket則是對TCP/IP協議的封裝和應用(程序員層面 上)。也可以說,TPC/IP協議是傳輸層協議,主要解決數據如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和 HTTP協議的關系,網路有一段比較容易理解的介紹: 「我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使 用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝 HTTP文本信息,然後使用TCP/IP做傳輸層協議將它發到網路上。」
而我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API), 通過Socket,我們才能使用TCP/IP協議。實際上,Socket跟TCP/IP協議沒有必然的聯系。Socket編程介面在設計的時候,就希望也 能適應其他的網路協議。所以說,Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道 的一些最基本的函數介面,比如create、listen、connect、accept、send、read和write等等。網路有一段關於 socket和TCP/IP協議關系的說法比較容易理解:「TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外 的操作介面。這個就像操作系統會提供標準的編程介面,比如win32編程介面一樣,TCP/IP也要提供可供程序員做網路開發所用的介面,這就是 Socket編程介面。」
關於TCP/IP協議的相關只是,用博大精深來講我想也不為過,單單查一下網上關於此類只是的資料和書籍文獻的數量就知道,這個我打算會買一些經典的書籍 (比如《TCP/IP詳解:卷一、卷二、卷三》)進行學習,今天就先總結一些基於基於TCP/IP協議的應用和編程介面的知識,也就是剛才說了很多的 HTTP和Socket。
CSDN上有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網路通信的能力。
實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的介面。
下面是一些經常在筆試或者面試中碰到的重要的概念,特在此做摘抄和總結。
一。什麼是TCP連接的三次握手
第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉 連接之前,TCP 連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次握手」(過程就不細寫了,就是伺服器和客 戶端交互,最終確定斷開)
二。利用Socket建立網路連接的步驟
建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
套接字之間的連接過程分為三個步驟:伺服器監聽,客戶端請求,連接確認。
1。伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。
2。客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。
3。 連接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶 端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
三。HTTP鏈接的特點
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。
四。TCP和UDP的區別(考得最多。。快被考爛了我覺得- -\\)
1。 TCP是面向鏈接的,雖然說網路的不安全不穩定特性決定了多少次握手都不能保證連接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證 了)保證了連接的可靠性;而UDP不是面向連接的,UDP傳送數據前並不與對方建立連接,對接收到的數據也不發送確認信號,發送端不知道數據是否會正確接 收,當然也不用重發,所以說UDP是無連接的、不可靠的一種數據傳輸協議。
2。也正由於1所說的特點,使得UDP的開銷更小數據傳輸速率更高,因為不必進行收發數據的確認,所以UDP的實時性更好。
知 道了TCP和UDP的區別,就不難理解為何採用TCP傳輸協議的MSN比採用UDP的QQ傳輸文件慢了,但並不能說QQ的通信是不安全的,因為程序員可以 手動對UDP的數據收發進行驗證,比如發送方對每個數據包進行編號然後由接收方進行驗證啊什麼的,即使是這樣,UDP因為在底層協議的封裝上沒有採用類似 TCP的「三次握手」而實現了TCP所無法達到的傳輸效率。

⑦ 請問怎麼作一個手機APP,能實現TCP通信

網路一個java TCP通信或者android TCP通信 超多demo的,需要的話我給你一份代碼~

⑧ Android Http連接和TCP連接的區別

Http是應用層協議,TCP是網路層協議,應用層在TCP/IP四層架構中位於TCP的上一層。

建立Http連接在實現時有以下兩種方式:
1、[java] view plain
DefaultHttpClient http = new DefaultHttpClient();
HttpGet method = new HttpGet(url);
HttpResponse response =http.execute(method);
2、[java] view plain
URL url = new URL(uri);
HttpURLConnection connection = (HttpURLConnection)
url.openConnection();
connection.connect();

而TCP連接在實現時要藉助Socket(套接字 IP+埠號)
[java] view plain
Socket s = new Socket("localhost", 12345);

區別從這兩個連接的實現方式就可以看出來,HTTP連接需要指明資源的URL,發出請求的應用不知道伺服器的IP,雖然域名伺服器也是要把域名解析成IP地址,但不屬於應用所關心的范疇,是網路層應該完成的工作。所以Http連接屬於無狀態的短連接,若再請求其他數據,需要再重新建立連接。客戶端向伺服器發送請求後,伺服器才知道客戶端的存在。
TCP連接實現時需要指明IP地址和埠號,就可以跟目的主機通過三次握手建立聯系,該連接一直保持直到某一方提出取消連接,通過四次握手關閉連接。Socket支持TCP/UDP協議,如果使用TCP協議,那麼socket連接就是TCP連接。論文提到的應用場景是手機與雲端的伺服器建立聯系,因為要保持連接並指定連接的建立時間,所以在這種場景下使用TCP連接最合適。3G網路不支持端到端建立TCP連接,因為它是client-server模式,所以需要通過雲端伺服器的輔助來實現手機的端到端通信。

⑨ android的tcp和udp有什麼聯系

tcp和udp都是網路傳輸協議, 和android沒有直接關系。所有基於網路訪問的過程都可能涉及這2個協議。簡單來講:tcp是可靠連接,即傳輸的數據必須完整,如用戶登錄的信息的驗證; udp是不可靠連接,即傳輸過程不能保證數據的完整性,如語音聊天,當網路條件不好時,可能會丟失內容。

⑩ C# 和Android的 TCP(UDP)通信

伺服器程序
它僅僅建立ServerSocket監聽,並使用Socket獲取輸入輸出流。
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

//創建一個ServerSocket,用於監聽客戶端socket的連接請求
ServerSocket ss=new ServerSocket(30000);
//採用循環不斷接受來自客戶端的請求,伺服器端也對應產生一個Socket
while(true){
Socket s=ss.accept();
OutputStream os=s.getOutputStream();
os.write("您好,您收到了伺服器的新年祝福!n".getBytes("utf-8"));
os.close();
s.close();
}

}}

客戶端程序
package my.learn.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;

public class SimpleClient extends Activity {
private EditText show;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
show = (EditText) findViewById(R.id.show);

try {

Socket socket = new Socket("自己計算機的IP地址", 30000);
//設置10秒之後即認為是超時
socket.setSoTimeout(10000);
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String line = br.readLine();

show.setText("來自伺服器的數據:"+line);

br.close();
socket.close();

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
Log.e("UnknownHost", "來自伺服器的數據");
e.printStackTrace();
} catch (IOException e) {
Log.e("IOException", "來自伺服器的數據");
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

熱點內容
ftppro特效復制方法 發布:2024-05-08 04:06:05 瀏覽:925
平板電腦編譯軟體 發布:2024-05-08 04:05:46 瀏覽:477
榮耀v6平板擴展存儲 發布:2024-05-08 03:41:12 瀏覽:422
安卓手機為什麼半年一更新 發布:2024-05-08 03:36:52 瀏覽:660
存儲設備報價 發布:2024-05-08 02:22:01 瀏覽:554
定步長的演算法 發布:2024-05-08 02:16:18 瀏覽:110
怎麼使用pe口袋伺服器 發布:2024-05-08 02:02:18 瀏覽:471
xml資料庫c 發布:2024-05-08 02:01:46 瀏覽:456
仿知乎android 發布:2024-05-08 01:56:00 瀏覽:904
mysql編譯參數 發布:2024-05-08 01:53:46 瀏覽:194