1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Giao thức OBject Exchange pptx

14 458 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giao thức OBEX
Thể loại Bài giảng
Định dạng
Số trang 14
Dung lượng 582,8 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

OBEX LÀ GÌ?OBEX OBject EXchange là giao thức trao đổi dữ liệu giữa các thiết bị dùng cổng hồng ngoại được hiệp hội IrDA Infrared Data Association đưa ra lần đầu tiên năm 1997.. Ban đầu,

Trang 1

OBEX LÀ GÌ?

OBEX (OBject EXchange) là giao thức trao đổi dữ liệu giữa các thiết bị dùng cổng hồng ngoại được hiệp hội IrDA (Infrared Data Association) đưa ra lần đầu tiên năm 1997 Ban đầu, giao thức này chỉ giới hạn cho các thiết bị sử dụng môi trường ánh sáng hồng ngoại, nhưng rất nhanh sau đó nó được tổ chức Bluetooth SIG (Bluetooth Special Interest Group) đưa vào hầu hết các thiết bị Bluetooth của mình

1 Vị trí OBEX trong mô hình OSI

Cũng giống như các giao thức khác, giao thức OBEX được xây dựng trên nền mô hình OSI (Open Systems Interconnection) bao gồm hai thành phần chính:

• OBEX session protocol (giao thức phiên OBEX): mô tả cấu trúc gói tin trong phiên

làm việc giữa hai thiết bị

• OBEX application framework: tập các dịch vụ OBEX cung cấp cho các ứng dụng đầu

cuối như truyền file, in ảnh

OBEX Application Ù Tầng ứng dụng

Trang 2

ication OBEX Framework

Tầng trình diễn

IrLAP ManagerLink Tầng liên kết dữ liệu

H ình 1: Giao thức OBEX tro g n mô hình OSI

2 Cấu trúc gói tin trong giao thức phiên OBEX

Giao thức OBEX n kiểu "đẩy" (Push) hoặc "kéo" (Pull), cho phép m y" dữ liệu l r) hoặc "kéo" dữ liệu

từ server xuống Đ hiện i t nt server phải tuân thủ chặt chẽ cấu trúc đề ra Dưới đây là một vài cấu rong quá trình

http://www.hitekgroup.net)

2.1 Gói tin yêu cầu

Mọi gói tin yêu cầu cấu trúc như sau:

đ á

ược sử dụ

y khách (client) "

g chủ yếu trong các đẩ

ứ ê

ng dụng

n máy chủ (serve rao đổi giữa clie

ể thực điều này, các gó in t và

trúc được sử dụng t khảo tài liệu IrOB ient và s r (chi tiết có thể tham E

đều có

Byte 0 Byte 1, 2 Byte 3 đến n opcode packet length Headers

Opcode: Mã lệnh ừ ầu (Bản ) Bit ca ọi là F al bit

Packet length: Độ

Header: Thông tin đầu có cấu trúc như sau:

ứng với t ng yêu c g 1 o nhất g in dài của gói tin

Byte 0 Byte 1, 2 Byte 3 đến n

identifier header length (tuỳ chọn) value

Trang 3

Bảng 1: Mã lệnh yêu cầu

Mã lệnh Kiểu Mô tả 0x80 CONNECT Thiết lập phiên

giao dịch 0x81 DISCONNECT Ngừdịch ng phiên giao 0x02

(0x82) PUT

Gửi dữ liệu lên

0x03 (0x83) GET Lấy dữ liệu từ server 0xFF ABORT Hủy bỏ phiên giao dịch

Định

0x01 NAME Tên file (mã Unicode) 0xC3 LENGTH Kích thước file theo byte 0x48 BODY Đoạn dữ liệu của file 0x49 END OF BODY Đoạn dữ liệu cuối cùng của file

2.2 Gói tin trả lời

Giống như gói tin yêu cầu, gói tin trả lời có cấu trúc như sau:

Byte 0 Byte 1, 2 Byte 3 to n

response opcode response length response data

Một số mã trả lời (response opcode) thường gặp:

0x10 (0x90) Tiếp tục yêu cầu hoặc trả lời 0x20 (0xA0) Xác nhận kết thúc yêu cầu

0x40 (0xC0) Lỗi yêu cầu 0x41 (0xC1) Lỗi do không có quyền

Trang 4

0x43 (0xC3) Phiên giao dịch bị huỷ bỏ 0x44 (0xC4) Không tìm thấy file

3

Quá trình trao đổi file giữa client và server được chia làm 3 giai đoạn:

Cùng giải quyết

• Ngừng phiên: DISCONNECT

3.1 Thiết lập phiên (CONNECT

Gói tin CONNEC có cấu trúc nh

Thiết lập phiên: CONNECT

• Nhận/gửi file: GET/PUT

)

Byte

0 0

Byte 1,

2 Byte 3

Byte

4 Byte 5, 6

Byte 7

to n

0x80 packet length

OBEX version number

flags

maximum OBEX packet length

optional head s er

OBEX version num o thức OBEX gồm major number lưu tại 4 bit cao, minor number lưu t hấp Phiên bản hiện tại là 1.0, do đó giá trị này là 0x10

Flags: Giá trị này luôn là 0x00 trong phiên b

thiết bị có thể nhận hoặc gử này hau Do đó khi thiết lập phiên, client cần g để kiểm tra xem kích thước gói tin lớn nhất mà server có thể nhận hoặc gửi là b

Optional headers: Thông tin đầu được tù ch của mỗi phiên giao dịch Trong ví dụ dưới đây, giá trị này có thể bỏ qua

ber: Phiên bản gia

ại 4 bit t

ản hiện tại

pac gth: Giá ị lớn nhất của gói tin tron th

i Giá tr ửi

iá trị này lên server

ở client và server có thể khác n g

ao nhiêu?

y chọn ứng với mục đí

Yêu cầu từ client byte Ý nghĩa

0x0007 Độ dài gói tin = 7 bytes 0x10 Phiên bản OBEX 1.0

Mã yêu cầu

0x00 Flags đối với phiên bản

Trang 5

hiện tại

0

Kích thước lớn nhất của gói tin là 8K

Mã trả lời 0xA0 SUCCESS 0x0007 Độ dài gói tin = 7 bytes 0x10 Phiên bản OBEX 1.0 0x00 Flags đối với phiên bản hiện tại

0x0200

Kích thước lớn nhất của gói tin mà server có thể nhận hoặc gửi là 512 bytes

3.2 Gửi file (PUT)

Không giống như gói tin CONNECT, gói tin PU in đầu sau:

NAME: Thông tin về tên file

LENGTH: Thông tin về kích

BODY: Đoạn dữ liệu file

END OF BODY Đoạn dữ liệu cu ủa l

Dưới đây là ví gửi 1 file hello.gif có kích th PC lên server (ĐTDĐ) Do kích thước của file n hơn kích th rver có thể

gửi Gói tin 1 có mã yêu cầu PUT là 0x02 (khôn tin 2 có mã yêu cầu PUT là 0x82 (thiết lập Fi

T có thêm một số thông t

thước file

lớ ước gói tin lớn nhất mà se

client sẽ chia file thành h

g thiết lập Final bit)

Gói nal bit)

Yêu cầu từ client byte Ý nghĩa

PUT, Final bit không thiết lập để chỉ cho server biết client còn gửi yêu cầu tiếp theo

0x01E2 Độ dài gói tin = 482 bytes

Mã yêu cầu

0x01 Định danh thông tin đầu

NAME (tên file)

Trang 6

0x0017 Độ dài của thông tin đầu NAME = 20+3 = 23

bytes

hello.gif Tên file (unicode) có ký tự kết thúc NULL (20

bytes)

Định danh thông tin đầu LENGTH (kích thước file)

0x000002D1 Kích thước file = 721 bytes 0x48 Định danh thông tin đầu BODY (dữ liệu file)

0x01C3 Độ dài của thông tin đầu BODY = 448+3 = 451

bytes

0x Đoạn dữ liệu file có kích

thước 448 bytes

Mã trả lời 0x90 CONTINUE, tiếp tục nhận yêu cầu từ client 0x0003 độ dài gói tin = 3 bytes

Mã yêu cầu 0x82

PUT, Final bit được thiết lập để chỉ cho server biết đây là gói tin cuối cùng

0x0117 Độ dài gói tin = 279 bytes 0x49 Định danh thông tin đầu END OF BODY

0x0114 Độ dài của thông tin đầu END OF BODY = 276

bytes

0x

Đoạn dữ liệu file có kích thước 721-448 = 273

Mã trả lời 0xA0 SUCCESS 0x0003 độ dài gói tin = 3 bytes

3.3 Nhận file (GET)

Khác với gói tin PUT, gói tin GET chỉ có thông tin đầu NAME Ví dụ sau sẽ mô tả quá

Trang 7

trình nhận file hello.gif có kích th 21 lie t (PC) sẽ gửi yêu cầu GET đ server (ĐTD ôn ile Do ích thước của file yêu cầu lớn hơn 512 bytes (với Sony Eri lời đầu tiên có mã

lời là CONTINUE, client biết rằng đây chưa đoạn dữ liệu cuối cùng của file nên tiếp tục gửi yêu cầu (không cần thông tin đầu n được mã trả lời

là 0xA0 (SUCCESS)

ước 7 với th gb tyin đầu NAME là tên ftes từ server Trước tiên c n k

csson T610) nên gói tin trả hần dữ liệu của file Kh phải là

NAME) cho đến khi nhậ

Yêu cầu từ client byte Ý nghĩa 0x83 GET, Final bit được thiết

0x001A Độ dài gói tin = 26 bytes 0x01 Định danh thông tin đầu

NAME (tên file) 0x0017 Độ dài của thông tin đầu

NAME = 20+3 = 23 bytes

Mã yêu cầu

hello.gi

f

Tên file (unicode) có ký tự kết thúc NULL (20 bytes)

0x90 CONTINUE, còn dữ liệu

0x01C6 Độ dài gói tin = 454 bytes 0x48 Định danh thông tin đầu BODY (dữ liệu file)

0x01C3

Độ dài của thông tin đầu BODY = 448+3 = 451

Mã trả lời

0x Đoạn dữ liệu file có kích thước 448 bytes

0x83 PUT, tiếp tục yêu cầu nhận file

Mã yêu cầu

0x0003 Độ dài gói tin = 3 bytes

0xA0 SUCCESS, đoạn dữ liệu cuối cùng 0x0117 Độ dài gói tin = 279 bytes 0x49 Định danh thông tin đầu

Mã trả lời

0x0114 Độ dài của thông tin đầu

END OF BODY = 276

Trang 8

bytes

0x Đoạn dữ liệu file có kích thước 273 bytes

3.4 Ngừng phiên (DISCONNECT)

nt cần gửi gói tin DISCONNECT tới server

Để kết thúc phiên giao dịch, clie

Yêu cầu từ

client byte Ý nghĩa

Mã yêu cầu 0x81 DISCONNECT 0x0003 Độ dài gói tin = 3 bytes

Mã trả lời 0xA0 SUCCESS 0x0003 Độ dài gói tin = 3 bytes

OBEX trong điện thoại di

Ngày nay, ĐTDĐ không chỉ là phương tiện liên lạc đơn thuần mà còn là một thiết bị giải trí với nhiều chức năng như nghe nhạc, chụp ảnh,

v

hoặc lưu lại những khoảnh khắc đ

xin giới thiệu hai kiểu kết nối phổ biến nhất trên hầu hế

cổng hồng ngoại và Bluetooth; đồng thời hướng dẫn các

PC

động

chơi game Điều này đồng nghĩa với iệc người dùng luôn có nhu cầu cập nhật những bản nhạc hay, những trò chơi yêu thích

áng nhớ trên chiếc điện thoại của mình Dưới đây tôi

t các ĐTDĐ đời mới hiện nay là

h lập trình trao đổi dữ liệu giữa

và ĐTDĐ sử dụng giao thức OBEX qua hai loại kết nối này

ằng C#

1 Kết nối qua hồng ngoại b

Giao thức IrDA đư tiên năm 1994 v không dâ phạm vi hoạt động lên tới 1 m, góc mở từ tốc độ có thể đạt 4Mbps, cổng h

được đưa vào trong hầu hết các ĐTD

Trước đây, việc lập trình với cổng hồng cản

Int

Framewo

chóng hơ

bằng việc chỉ ra địa chỉ của server (tương tự như địa chỉ IP) và tê

(tươ

ợc hiệp hội IrDA giới thiệu lần đầu

ới mục đích tăng cường khả năng kết nối

y giữa các thiết bị qua ánh sáng hồng ngoại Với

15 đến 30 độ, ồng ngoại nhanh chóng thiết bị không dây như

Đ, PDA

ngoại là một rào đối với những ai chưa quen với giao diện lập trình API (Application Programming erface) của Windows, còn ngày nay, với phiên bản NET 2.0, Microsoft đã đưa vào bộ

rk này lớp thư viện IrDA, cho phép người lập trình viết mã dễ dàng và nhanh

n Giống như giao thức TCP/IP, client có thể thiết lập kết nối IrDA tới server

n dịch vụ trên server

ng tự như TCP Port)

Trang 9

Mỗi chiếc g với cổng hồng ngoại t

đó Đoạn m

void Form1_Load(object sender, EventArgs e)

{

/*

Ir

/*

IrDADeviceInfo[] irDevices = irClient.DiscoverDevices(2);

/* In thông báo khi không tìm thấy thiết bị nào */

if (irDevices.Length == 0) {

ã sau cho phép xác định địa chỉ này:

using System.Net.Sockets;

Khởi tạo client */

DAClient irClient = new IrDAClient();

Tìm kiếm tối đa 2 thiết bị */

Không tìm thấy thiết bị hồng ngoại");

/* In tên và địa chỉ của từng thiết bị tìm thấy */ for (int i = 0; i < irDevices.Length; i++) {

Name:{0}",irDevices[i].DeviceName);

ong ĐTDĐ có thể khác nhau mỗi nhà

Đ hiện nay đều cung cấp hai dịch vụ

EX Trong phạm vi bài viết này tôi chỉ đề cập đến

h vụ IrDA:OBEX, dịch vụ cho phép PC và ĐTDĐ trao đổi dữ liệu qua giao thức

EX Việc kết nối tới dịch vụ này được thực hiện thông qua đoạn mã dưới đây:

sing System.Net.Sockets;

oid Form1_Load(object sender, EventArgs e)

c gắn một địa chỉ duy nhất tương ứn

Console.WriteLine("

} else {

Console.WriteLine("Device

Console.WriteLine("Device ID:{0}",irDevices[i].DeviceID);

}

}

}

Các dịch vụ IrDA được xây dựng sẵn (built-in) tr

sản xuất Tuy nhiên, nhìn chung hầu hết các ĐTD

chính là: IrDA:IrCOMM và IrDA:OB

dịc

OB

using System.Net;

u

v

Trang 10

{

/* Thiết lập EndPoint */

IrDAEndPoint irEndPoint = new IrDAEndPoint(irDevices[0].DeviceID,

"IrDA:OBEX");

/* Khởi tạo socket */

Socket irSocket = new Socket(AddressFamily.Irda, SocketType.Stream, ProtocolType.Unspecified);

/* Kết nối tới ĐTDĐ qua dịch vụ OBEX*/

irSocket.Connect(irEndPoint);

}

Như vậy, từ giờ chúng ta có thể trao đổi dữ liệu giữa PC và ĐTDĐ qua irSocket bằng việc push/pull những gói tin OBEX thích hợp như đã đề cập ở phần trên

2 Kết nối qua Bluetooth bằng VC++

Năm 1994, hãng cung cấp thiết bị viễn thông hàng đầu thế giới Ericsson đã nghiên cứu thành công công nghệ không dây cho phép ĐTDĐ có thể kết nối với các phụ kiện như tai nghe, microphone qua sóng radio Sau đó 4 năm, tổ chức Bluetooth SIG được thành lập (bao gồm Ericsson, Intel, I

phiên bản 1.0A cho công ng

IEEE 802.15.1 hoạt động ở t

độ có thể đạt 3Mpbs đối v

Kể từ phiên bản Windows XP SP1

lập trình Microsoft Bluetooth Stack cho phé

Bluetooth socket Một vấn đề nảy sinh là không ph

trợ Microsoft Bluetooth Stack, mà phần lớn p

(Software Development Kit) riê

Bluetooth hỗ trợ Microsoft Blue

trong khi dòng IBM lại hỗ trợ W

Để lập trình với Bluetooth socket chúng ta ph

(

BM, Nokia và Toshiba) đã chính thức đưa ra đặc tả kỹ thuật

hệ Bluetooth vào năm 1999 Bluetooth hay còn có cái tên

ần số 2,4 GHz, phạm vi phủ sóng lên tới 100 m (Class 1), tốc

ới phiên bản 2.0+EDR (Enhanced Data Rate)

, Microsoft đã đưa vào hệ điều hành của mình mô hình

p kết nối với thiết bị Bluetooth thông qua

ải tất cả các chipset Bluetooth đều hỗ hải có driver đi kèm cũng như bộ SDK

ng để phát triển Chúng ta có thể tìm thấy chipset tooth Stack trên các máy tính xách tay SONY VAIO, idcomm Bluetooth Stack (bộ SDK có giá tới 1400 USD)

ải cài bộ SDK for Windows XP SP2

://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.ht

Bộ SDK này sẽ cung cấp một số file header cũng như các thư viện cần thiết trong quá

ưa hỗ trợ Bluetooth nên việc viết mã phải hoàn

ền thư viện API có sẵn của Windows

toàn giống như thiết bị hồng ngoại, chỉ có điều, bạn phải tự thân vận động Dưới đây là đoạn mã

thời in ra tên và địa chỉ

http

m)

trình lập trình Do phiên bản NET 2.0 ch

toàn thực hiện trên n

Cách tiếp cận thiết bị Bluetooth hoàn

thay vì sử dụng hàm có sẵn của NET,

viết bằng VC++ 2005 cho phép tìm kiếm thiết bị Bluetooth, đồng

Trang 11

#include <winsock2.h>

#include <Ws2bth.h>

#include <BluetoothAPIs.h>

#pragma comment(lib, "ws2_32.lib")

#pragma comment(lib, "irprops.li

/* compile with:

using namespace System;

void main()

{

WORD wVersionRequested = 0x202;

WSADATA m_data;

/* Khởi tạo Windows Socket */

if (WSAStartup(wVersionRequested, &m_data) == 0) {

/* Thiết lập thông số tìm kiếm */

WSAQUERYSET querySe

a mỗi thiết bị tìm thấy:

b") /clr */

t;

izeof(queryS f(querySet);

iếm là các thiết bị Bluetooth */

up;

ề TURN_NAME | LUP_CONTAINERS | LUP_RETURN_ADDR | _RETURN_BLOB;

, &hLookup);

nt < maxDevices && result == 0) {

memset(&querySet, 0, s

querySet.dwSize = sizeo

/* Xác lập phạm vi tìm k

querySet.dwNameSpace = NS_BTH;

HANDLE hLook

/* Thiết lập các thông tin trả v

DWORD flags = LUP_RE

LUP_FLUSHCACHE | LUP

/* Tìm kiếm tối đa 10 thiết bị */

int maxDevices = 10;

/* Bắt đầu quá trình tìm kiếm */

int result = WSALookupServiceBegin(&querySet, flags

while (cou

et));

*/

Trang 12

DWOR

sizeof(buffer);

WSAQUERYSET *pResults=

(WSAQUERYSET*)&buffer;

result=WSALooku

up,

pRe

/* I

E buffer[1000];

D bufferLength =

pServiceNext(hLook flags, &bufferLength,

sults);

n tên và địa chỉ của từng

thiết bị tìm thấy */

ole::WriteLine(pResults->lpszServiceInstanceName);

evice ID:{0}", bts->btAddr);

*/

luetooth ngày càng phong phú đáp ứng đầy đủ nhu

e, in ảnh, tai nghe Những dịch vụ

ất (UUID) và được định nghĩa sẵn trong file header Object Push có vai trò tương tự như dịch vụ

ạn mã cho phép kết nối tới dịch vụ

f.h>

if (result == 0) {

CSADDR_INFO *pCSAddr = (CSADDR_INFO*)pResults->lpcsaBuffer;

SOCKADDR_BTH *bts=(SOCKADDR_BTH*)pCSAddr->RemoteAddr.lpSockaddr;

Cons

Console::WriteLine("D

count++;

}

}

/* Kết thúc quá trình tìm kiếm

result = WSALookupServiceEnd(hLookup);

WSACleanup();

}

}

Trên ĐTDĐ hiện nay, các dịch vụ B

cầu kết nối không dây của người dùng như: truyền fil

này đều có một định danh duy nh

bthdef.h Trong đó dịch vụ OBEX

IrDA:OBEX của thiết bị hồng ngoại Dưới đây là đo

này:

#include <bthde

void main()

{

Hình 2: Lựa chọn kết nối Bluetooth

Ngày đăng: 10/12/2013, 00:15

HÌNH ẢNH LIÊN QUAN

Hình 2: Lựa chọn kết nối Bluetooth - Tài liệu Giao thức OBject Exchange pptx
Hình 2 Lựa chọn kết nối Bluetooth (Trang 12)
Hình 3: Các file trong thư mục điện thoại - Tài liệu Giao thức OBject Exchange pptx
Hình 3 Các file trong thư mục điện thoại (Trang 14)

TỪ KHÓA LIÊN QUAN

w