【移動應(yīng)用開發(fā)技術(shù)】Android中如何使用UDP協(xié)議傳輸數(shù)據(jù)_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android中如何使用UDP協(xié)議傳輸數(shù)據(jù)_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android中如何使用UDP協(xié)議傳輸數(shù)據(jù)_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android中如何使用UDP協(xié)議傳輸數(shù)據(jù)_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android中如何使用UDP協(xié)議傳輸數(shù)據(jù)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論