




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android中如何使用UDP協(xié)議傳輸數(shù)據(jù)
這篇文章將為大家詳細(xì)講解有關(guān)Android中如何使用UDP協(xié)議傳輸數(shù)據(jù),在下覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。1.使用UDP協(xié)議傳輸數(shù)據(jù)UDP協(xié)議不可靠,數(shù)據(jù)包發(fā)送出去之后無法確定是否被接收方接收到在Java里寫好Server如下package
com.umgsai.server;
import
.DatagramPacket;
import
.DatagramSocket;
import
java.util.Calendar;
import
java.util.Date;
public
class
Server
{
static
Date
date
;
public
static
void
main(String[]
args)
{
while
(true)
{
try
{
//
創(chuàng)建一個DatagramSocket對象,并指定監(jiān)聽的端口號
DatagramSocket
socket
=
new
DatagramSocket(4572);
byte
data[]
=
new
byte[1024];
//
創(chuàng)建一個空的DatagramPacket對象
DatagramPacket
packet
=
new
DatagramPacket(data,
data.length);
//
使用receive方法接收客戶端所發(fā)送的數(shù)據(jù)
socket.receive(packet);
String
result
=
new
String(packet.getData(),
packet.getOffset(),
packet.getLength());
date
=
Calendar.getInstance().getTime();
System.out.println(date);
System.out.println("result>"
+
result);
socket.close();
}
catch
(Exception
e)
{
e.printStackTrace();
}
}
}
}客戶端在Android里面編寫界面activity_main.xml
<Button
android:id="@+id/sendMessage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="發(fā)送消息"
/>Android4.0+操作系統(tǒng)中連接網(wǎng)絡(luò)的操作不能在主線程中進(jìn)行public
class
MainActivity
extends
Activity
{
private
Button
sendMessage
=
null;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendMessage
=
(Button)
findViewById(R.id.sendMessage);
sendMessage.setOnClickListener(new
clientListener());
}
class
clientListener
implements
OnClickListener{
@Override
public
void
onClick(View
v)
{
HandlerThread
handlerThread
=
new
HandlerThread("handler_Thread");
handlerThread.start();
ClientHandler
clientHandler
=
new
ClientHandler(handlerThread.getLooper());
Message
msg
=
clientHandler.obtainMessage();
Bundle
bundle
=
new
Bundle();
msg.setData(bundle);
//
將msg發(fā)送到目標(biāo)對象,即生成msg對象的Handler對象
msg.sendToTarget();
}
}
class
ClientHandler
extends
Handler
{
public
ClientHandler()
{
}
public
ClientHandler(Looper
looper)
{
super(looper);
}
@Override
public
void
handleMessage(Message
msg)
{
super.handleMessage(msg);
Bundle
bundle
=
msg.getData();
try
{
//
首先創(chuàng)建一個DatagramSocket對象
DatagramSocket
socket
=
new
DatagramSocket(4572);
//
創(chuàng)建一個InetAddree
InetAddress
serverAddress
=
InetAddress.getByName("15");
String
str
=
"hello";
byte
data[]
=
str.getBytes();
//
創(chuàng)建一個DatagramPacket對象,并指定要講這個數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)當(dāng)中的哪個地址,以及端口號
DatagramPacket
packet
=
new
DatagramPacket(data,
data.length,
serverAddress,
4572);
//
調(diào)用socket對象的send方法,發(fā)送數(shù)據(jù)
socket.send(packet);
socket.close();
Toast.makeText(MainActivity.this,
"數(shù)據(jù)已發(fā)送",
Toast.LENGTH_SHORT).show();
}
catch
(Exception
e)
{
//
TODO:
handle
exception
e.printStackTrace();
}
}
}
}客戶端需要的權(quán)限
<uses-permission
android:name="android.permission.INTERNET"
/>TCP協(xié)議是可靠的協(xié)議TCPServer.javapublic
class
TCPServer
{
public
static
void
main(String[]
args)
throws
IOException
{
ServerSocket
listen
=
new
ServerSocket(5050);
Socket
server
=
listen.accept();
InputStream
in
=
server.getInputStream();
OutputStream
out
=
server.getOutputStream();
char
c
=
(char)
in.read();
System.out.println("收到:"
+
c);
out.write('s');
out.close();
in.close();
server.close();
listen.close();
}
}TCPClient.javapublic
class
TCPClient
{
public
static
void
main(String[]
args)
throws
IOException
{
Socket
client
=
new
Socket("",
5050);
InputStream
in
=
client.getInputStream();
OutputStream
out
=
client.getOutputStream();
out.write('c');
char
c
=
(char)
in.read();
System.out.println("收到:"
+
c);
out.close();
in.close();
client.close();
}
}Socket編程與Android操作系統(tǒng)無關(guān),使用的是J包里的類。在Android里面進(jìn)行網(wǎng)絡(luò)編程的時候要注意不能將連接網(wǎng)絡(luò)的代碼放到主線程里。PS:在非UI線程里顯示Toast的時候要按照下面的方式寫Looper.prepare();
Toast.makeText(MainActivity.this,
result,
Toast.LENGTH_SHORT).show();
Looper.loop();Mars視頻提供的TCP例子如下Server端class
ServerThread
extends
Thread
{
public
void
run(){
//聲明一個ServerSocket對象
ServerSocket
serverSocket
=
null;
try
{
//創(chuàng)建一個ServerSocket對象,并讓這個Socket在4567端口監(jiān)聽
serverSocket
=
new
ServerSocket(4567);
//調(diào)用ServerSocket的accept()方法,接受客戶端所發(fā)送的請求
Socket
socket
=
serverSocket.accept();
//從Socket當(dāng)中得到InputStream對象
InputStream
inputStream
=
socket.getInputStream();
byte
buffer
[]
=
new
byte[1024*4];
int
temp
=
0;
//從InputStream當(dāng)中讀取客戶端所發(fā)送的數(shù)據(jù)
while((temp
=
inputStream.read(buffer))
!=
-1){
System.out.println(new
String(buffer,0,temp));
}
}
catch
(IOException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
finally{
try
{
serverSocket.close();
}
catch
(IOException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
}
}
}Client端public
class
TCPClient
{
public
static
void
main(String[]
args)
{
try
{
//創(chuàng)建一個Socket對象,指定服務(wù)器端的IP地址和端口號
Socket
socket
=
new
Socket("04",4567);
//使用InputStream讀取硬盤上的文件
InputStream
inputStream
=
new
FileInputStream("f://file/words.txt");
//從Socket當(dāng)中得到OutputStream
OutputStream
outputStream
=
socket.getOutputStream();
byte
buffer
[]
=
new
byte[4*1024];
int
temp
=
0
;
//將InputSt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國二氧化碳校驗器數(shù)據(jù)監(jiān)測研究報告
- 統(tǒng)編版二年級語文下冊第七單元達(dá)標(biāo)測試卷(含答案)
- 四升五語文知識銜接專項訓(xùn)練 專題二·漢字 同步練習(xí)(含答案)人教統(tǒng)編版
- 高叉理論考試試題及答案
- 環(huán)宇技校焊工考試題及答案
- 2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識強(qiáng)化訓(xùn)練試卷A卷附答案
- 河南單招培訓(xùn)試題及答案
- 2023-2024學(xué)年廣東省廣州市華南師大附屬番禺學(xué)校七年級(下)月考數(shù)學(xué)試卷(含答案)
- 采購與安裝分包合同(2篇)
- 農(nóng)業(yè)技術(shù)推廣數(shù)字化平臺建設(shè)方案
- 2025年食品供應(yīng)商合同范本
- 《網(wǎng)絡(luò)信息安全教學(xué)》課件
- (高清版)JTGT 3650-01-2022 公路橋梁施工監(jiān)控技術(shù)規(guī)程
- DZ∕T 0213-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 石灰?guī)r、水泥配料類(正式版)
- GB/T 28799.2-2020冷熱水用耐熱聚乙烯(PE-RT)管道系統(tǒng)第2部分:管材
- 2023-瑞幸咖啡vi手冊
- 10000中國普通人名大全
- 溶血性貧血護(hù)理
- 人教版九年級物理第十單元《能源與可持續(xù)發(fā)展-太陽能》PPT課件
- 首件檢驗作業(yè)流程控制卡
- 身份證號碼轉(zhuǎn)換工具
評論
0/150
提交評論