intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình ứng dụng trên Pocket PC - Khả năng kết nối mạng bằng .Net Compact Framework - Nguyễn Tuấn Anh

Chia sẻ: Nguyen Quan | Ngày: | Loại File: PDF | Số trang:12

101
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Socket là chuẩn cho truyền thông với các máy tính trên mạng cục bộ (LAN) và mạng diện rộng (WAN), giống như là Internet. Hai máy tính giao tiếp với mỗi máy khác bằng cách sử dụng socket, sau đó nó trở thành giao thức phổ biến khi mà một máy tính đang mong chờ kết nối để nhận một kết nối, và một máy khác tạo kết nối khởi tạo.

Chủ đề:
Lưu

Nội dung Text: Lập trình ứng dụng trên Pocket PC - Khả năng kết nối mạng bằng .Net Compact Framework - Nguyễn Tuấn Anh

  1. Thu vien Hoc Lieu Mo Viet Nam module: m49327 1 Kh năng k t n i m ng b ng .Net Compact Framework∗ Nguy n Tu n Anh This work is produced by Thu vien Hoc Lieu Mo Viet Nam and licensed under the Creative Commons Attribution License † Tóm t t n i dung Kh năng k t n i m ng b ng .Net Compact Framework 1 Sockets Socket là chu n cho truy n thông v i các máy tính trên m ng c c b (LAN) và m ng di n r ng (WAN), gi ng như là Internet. Hai máy tính giao ti p v i m i máy khác b ng cách s d ng socket, sau đó nó tr thành giao th c ph bi n khi mà m t máy tính đang mong ch k t n i đ nh n m t k t n i, và m t máy khác t o k t n i kh i t o. [U+F0B7] Máy tính mong ch nh n m t k t n i, host ho c server, l ng nghe k t n i vào trên m t c ng nào đó. Máy tính có m t đ a xh IP duy nh t, gi ng như là 172.68.112.34, và hàng nghìn c ng s n sàng, nó s n sang cho nhi u chương trình cùng l ng nghe k t n i, m i k t n i s d ng m t c ng riêng. [U+F0B7] Máy tính t o ra kh i t o k t n i (client), xác đ nh đ a ch IP c a máy mong ch k t n i (server). N u bi t đư c tên c a máy mong ch k t n i như là www.mycomputer.org1 , chúng ta có th s d ng DNS tra c u đ xác đ nh đ a ch IP liên quan đ n tên. [U+F0B7] Client quy t đ nh c ng nào k t n i v i host. Ví d : Web servers luôn luôn l ng nghe trên c ng 80, vì v y máy tính mu n k t n i v i máy Web server khác quá trình luôn bi t nó c n thi t k t n i trên c ng 80. ng d ng thư ng s d ng m t lư ng l n các c ng không gi ng nhau, đư c s d ng b i b t kỳ ai, như là 10998. Ph m vi s hi u c ng mà ng d ng có th s d ng ph thu c vào h đi u hành. M t s h đi u hành d tr m t s s hi u c ng đ c bi t, ví d 1024. Đ an toàn nên ch n các c ng t 2000 và 60000. [U+F0B7] Client có th k t n i t i đ a ch IP và s hi u c ng. Host nh n k t n i. Khi đó t n t i m t k t n i socket gi a hai máy tính. [U+F0B7] Client và host g i các gói d li u qua l i. Trong ph n này chúng ta h c cách thao tác k t n i socket b ng .NET Compact Framework. 1.1 Giao th c: TCP/IP, UDP T ng quan, l p trình socket s d ng giao th c Internet đ g i các gói tin gi a hai máy. Có hai ki u gói tin s d ng đ g i d li u thông qua giao th c Internet: Gói tin TCP: ∗ Version 1.1: Jan 20, 2011 11:01 am GMT+7 † http://creativecommons.org/licenses/by/3.0/ 1 http://www.mycomputer.org/ http://voer.edu.vn/content/m49327/1.1/
  2. Thu vien Hoc Lieu Mo Viet Nam module: m49327 2 Đây là ki u gói tin thư ng đư c s d ng trên Internet đ truy n d li u đi xa, giao th c c a gói tin TCP trên giao th c Internet g i là m ng TCP/IP. N u m t máy tính g i m t gói tin TCP qua m t k t n i Socket, d li u trong gói đó đư c b o đ m t i đích mà không có l i. N u gói tin t i đích nhưng có l i, sau đó d li u l i đư c g i l i. N u gói tin không t i đích trong kho ng th i gian cho phép, sau ch c năng thư ng đư c g i đ g i báo báo gói tin có l i. Cách ki m tra l i thay đ i tuỳ theo t ng n n t ng (platform), nhưng chúng ta s nghiên c u quá trình x lý này chi ti t cho .NET Compact Framework. Gói tin UDP Gói tin này khác v i gói tin TCP, b i vì nó không đ m b o gói UDP s t i đích ho c d li u s không có l i. Tuy nhiên, s thi u đi quá trình ki m tra l i có nghĩa là s d ng gói tin UDP làm cho ph n đ u c a gói tin nh hơn, vì v y chương trình có th truy n d li u nhanh hơn. M t ng d ng t t s d ng gói tin UDP là đi n tho i Internet. 1.2 S th c thi c a IP: IPv4 hay IPv6 Quá trình x lý c a k t n i máy khách t i máy ch bao g m xác đ nh đ a ch IP c a máy ch và sau đó t o k t n i. S ph c t p c a quá trình truy n đi và truy n l i đúng đ a ch là trách nhi m c a giao th c Internet. Giao th c này có m t vài phiên b n. Giao th c Internet phiên b n 4, IP4 là ph bi n nh t đư c s d ng trên Internet. M t đ a ch IPv4 bao g m b n ph n 8 bít. M t đ a ch IPv4 g m b n ph n, m t ph n bao g m các s th p phân t 0 đ n 255, các ph n đư c cách nhau b i d u “.”, gi ng như là 172.68.112.34. Ngày nay đ k t n i v i th gi i, IPv4 không cung c p đ đ a ch duy nh t cho m i máy tính. Phiên b n m i nh t c a giao th c IP là 6, thư ng vi t là IPv6. Nó không đư c s d ng ph bi n. IPv6 bao g m tăng cư ng tính b o m t và đ a ch . IPv6 s cung c p đ đ a ch IP duy nh t cho m i máy tính trong tương lai. .NET Compact Framework h tr nhi u hơn cho phiên b n trư c (IPv4). Nó không h tr giao th c IPv6. Trong ph n này chúng ta ch tìm hi u v giao th c IPv4. 2 L p trình Socket v i .NET Compact Framework L p System.Net.Sockets.Socket. Th t c đ nh n m t l p Socket k t n i v i máy xa ph thu c vào máy tính đó, tuy nhiên quá trình x lý đ đ c và ghi d li u là gi ng nhau. Đ s d ng các l p x lý m ng trong .NET Compact Framework, chúng ta ph i khai báo không gian tên System.Net. Ví d : using System.Net. 2.1 T o k t n i t máy khách t i máy ch (client) Đ t o m t k t n i thành công, trư c tiên chúng ta ph i tìm hi u l p System.Net.EndPoint. Đ lưu gi thông tin v đi m cu i nơi mà k t n i đ n: đ a ch IP c a máy ch và s hi u c ng mong mu n. Đ thi t l p đúng đi m cu i và s d ng nó đ k t n i socket t i máy ch , chúng ta làm theo các bư c sau: Bư c 1: Khai báo bi n đi m cu i (EndPoint) và bi n Socket. Bư c2: Đi m cu i g m thông tin đ a ch và s hi u c ng. Có hai cách đ làm đi u này, ph thu c vào đ a ch c a máy ch , gi ng như là: 172.68.25.34, ho c tên DSN c a máy ch , như là www.mycomputer.net2 .3 Tìm đ a ch IP c a m t máy ch : N u chúng ta bi t đ a ch IP c a máy ch , s d ng IPAddress trong c u trúc. Ví d sau mô t kh i t o m t đi m cu i, máy ch có đ a ch IP là 172.68.25.34, và c ng 9981: EndPoint l_EndPoint = new IPEndPoint( IPAddress.Parse( "172.68.25.34"), Convert.ToInt16(9981)); N u chúng ta không bi t đ a ch IP, chúng ta ph i dùng DSN đ tìm đ a ch IP c a máy ch thông qua tên. DSN tìm ki m tr l i đ a ch IP tương ng v i tên. Đo n mã sau là m t trư ng h p: 2 http://www.mycomputer.net/ 3 http://www.mycomputer.net/ http://voer.edu.vn/content/m49327/1.1/
  3. Thu vien Hoc Lieu Mo Viet Nam module: m49327 3 IPHostEntry l_IPHostEntry = Dns.Resolve("www.mycomputer.net"); EndPoint l_EndPoint = new IPEndpoint(l_IPHostEntry.AddressList[0],9981); Bư c3: S d ng đi m cu i (EndPoint) đ th k t n i socket t i máy ch . Chúng ta ph i s d ng m nh đ try/catch đây, b i vì th k t n i s đưa ra m t ngo i l n u có v n đ , như máy ch t ch i không ch p nh n k t n i ho c máy ch không t n t i,... Ví d sau mô t ba bư c trên: try { Socket l_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); l_Socket.Connect(l_EndPoint); if (l_Socket.Connected){ // l_Socket b y gi có th g i và nh n d li u } } catch (SocketException e) { /* Đưa ra thông báo l i,. . . */ } 2.2 T o k t n i t máy ch l ng nghe t máy khách (Host) Chúng ta có th thu đư c m t k t n i socket t máy tính xa b ng cách đ m nhi m như là máy ch . Khi m t thi t b như máy ch , nó đ i nh n k t n i t các máy khách. Đ t o k t n i đ thi t b c a chúng ta như là máy ch , chúng ta ph i thi t l p m t socket l ng nghe trên m t c ng đ n khi m t ai đó g i m t yêu câu k t n i đ n thi t b c a chúng ta. Sau đây là các bư c t o socket l ng nghe trên m t c ng đ cho máy khác k t n i t i: Bư c 1: T o m t socket đ l ng nghe k t n i. Bư c2: Ràng bu c socket l ng nghe trên m t c ng. Nó ch l ng nghe k t n i trên m t c ng. Bư c3: G i Accept() trên socket l ng nghe nh n đư c t socket khác khi m t ai đó k t n i t i. Đo n mã có th đ c và ghi socket nh n đư c, và socket ti p t c đ i k t n i m i. Ví d sau mô t ba bư c trên: m_listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); m_listenSocket.Bind(new IPEndPoint(IPAddress.Any, 8758)); m_listenSocket.Listen((int)SocketOptionName.MaxConnections); m_connectedSocket = m_listenSocket.Accept(); if (m_connectedSocket != null) { if (m_connectedSocket.Connected) { // Someone has connected to us. } } 2.3 G i và nh n trên Socket đã k t n i M t socket đư c k t n i t i máy tính xa. Nó có th s d ng g i và nh n d li u. Cách đơn gi n nh t đ làm vi c này là g i Socket.Send() đ g i d li u và Socket.Receive() nh n d li u. http://voer.edu.vn/content/m49327/1.1/
  4. Thu vien Hoc Lieu Mo Viet Nam module: m49327 4 2.3.1 G i d li u vào m t Socket cùng v i Socket.Send Socket.Send() có b n thành ph n n p ch ng, m i thành ph n là m t m c khác nhau c a đi u khi n thông qua cái đư c g i: - Send(Byte[] buffer): G i t t c m i th bên trong m ng byte buffer. - Send(Byte[] buffer, SocketFlags socketFlags) G i t t c m i th trong buffer cùng v i s h n ch riêng thông qua cách d li u đi như th nào. - Send(Byte[] buffer, Int32 size, SocketFlags socketFlags): G i t t c d li u trong buffer tuỳ theo kích c size. N u chúng ta mu n g i ch m t ph n c a m t buffer, sau đó có th ch rõ SocketFlags.None s d ng m c đ nh hành vi g i. Ví d , đ g i 16 byte đ u ti n c a m ng, chúng ta có th s d ng l_Socket.Send(l_buffer, 16, SocketFlags.None). - Send(Byte[] buffer, Int32 offset Int32 size, SocketFlags socketFlags): Gi ng như thành ph n trên ch khác là chúng ta có th ch rõ ch s b t đ u c a m ng. Ví d , đ g i t byte t 3 đ n bute th 7 c a m ng, chúng ta có th s d ng như sau: l_Socket.Send(l_buffer, 2, 6, SocketFlags.None); Phương th c Send tr v s byte g i thành công. V n đ này cùng v i phương th c send() dư ng như gi ng nhau r t nhi u vi c bi n đ i t t c m i cái chúng ta mu n g i vào m ng các byte đ g i thông qua socket. .NET Compact Framework h tr hai l p r t h u ích, System.Text.Encoding và System.Convert, hai l p này giúp chuy n đ i ki u d li u cơ b n thành m ng các byte đ có th g i qua socket. Cách d nh t đ tìm hi u cách s d ng l p Encoding và Convert là xem ví d . Sau đây là ví d socket có tên là l_Socket đã t n t i và đã đư c k t n i: [U+F0B7] G i m t chu i s d ng mã hoá ASCII : l_Socket.Send(Encoding.ASCII.GetBytes("Send me") [U+F0B7] G i m t chu i s d ng mã hoá Unicode: l_Socket.Send(Encoding.Unicode.GetBytes("Send me") [U+F0B7] G i m t s nguyên có giá tr 2003: l_Socket.Send(Encoding.ASCII.GetBytes(Convert.ToString(2003)) [U+F0B7] G i m t s th c có giá tr 2.7: l_Socket.Send(Encoding.ASCII.GetBytes(Convert.ToString(2.71)) 2.3.2 Nh n d li u t t socket b ng Socket.Receive Nh n d li u t m t socket thông qua phương th c Socket.Receive. Receive có b n thành ph n n p ch ng, gi ng như thành ph n n p ch ng c a Socket.Send. M i thành ph n n p ch ng tr v s byte đ c thành công: - Receive (Byte[] buffer): Thành ph n này nh n d li u trong b đ m. - Receive (Byte[] buffer, SocketFlags socketFlags) Thành ph n này nh n d li u trong b đ m b ng cách s d ng c đ ch ra d li u đư c l y như th nào. - Receive (Byte[] buffer, Int32 size, SocketFlags socketFlags) Thành ph n này nh n tuỳ theo kích c c a d li u trong b đ m. N u d li u nhi u hơn d li u s n sàng, nó đư c b qua. Chúng ta có http://voer.edu.vn/content/m49327/1.1/
  5. Thu vien Hoc Lieu Mo Viet Nam module: m49327 5 th nh n d li u còn l i b ng cách g i l i Receive. N u chúng ta ch mu n nh n nh ng byte mà chúng ta không nh n đư c, sau đó chúng ta có th ch SocketFlags.None đ s d ng m c đ nh cho hành đ ng g i. Ví d đ nh n 16 byte đ u tiên c a d li u s n sàng, s d ng l_Socket.Receive(l_buffer, 16, SocketFlags.None) - Receive (Byte[] buffer, Int32 offset Int32 size, SocketFlags socketFlags) Thành ph n này gi ng như thành ph n trư c, ch khác là chúng ta có th ch ra ch s trong m ng đ s d ng b t đ u ghi d li u vào m ng. Ví d , đ nh n 7 byte d li u trong b đ m b t đ u t v trí th 3 trong b đ m, s d ng đo n mã sau: l_Socket.Receive(l_buffer, 2, 6, SocketFlags.None); Có k thu t cho phép chuy n đ i d li u đ g i t socket ra m ng, k thu t đơn gi n nh t là chuy n đ i m ng byte trong ki u d li u cơ b n. Như ph n trư c, l p Encoding và Convert cung c p phương ti n cho chuy n đ i, và chúng ta s xem trong ví d . Đ y là ví d th a nh n d li u đã đư c nh n trong m ng Byte có tên là l_Buffer: [U+F0B7] Chuy n đ i các byte nh n đư c trong m t chu i ASCII : string l_ASCII = Encoding.ASCII.GetString(l_Buffer); [U+F0B7] Chuy n đ i các nh n đư c trong m t chu i Unicode: string l_ASCII = Encoding.Unicode.GetString(l_Buffer); [U+F0B7] Chuy n đ i các byte nh n đư c, cái đó là mã ASCII text integer: int l_Integer = Convert.ToInt32(Encoding.ASCII.GetString(l_Buffer)); [U+F0B7] Chuy n đ i các byte nh n đư c, cái đó là mã ASCII text integer, into a Double: Double l_Double = Convert.ToInt32(Encoding.ASCII.GetString(l_Double)); B ng 3.1. Danh sách các thành ph n chuy n đ i đư c h tr b i l p Convert trên .NET Compact Framework. http://voer.edu.vn/content/m49327/1.1/
  6. Thu vien Hoc Lieu Mo Viet Nam module: m49327 6 Hình 1: B ng 3.1. L p Convert trên .NET Compact Framework 3 Tu n t hóa đ i tư ng đ truy n qua Socket Phi n b n desktop c a .NET Framework cho phép tu n t hóa h u h t ki u đ i tư ng thành m ng các byte, đ có th g i qua socket. Các đ i tư ng ph c t p, ngư i phát tri n th c thi giao di n ISerializable, cùng v i mã tu n t (serialize) và h i ph c (deserialize) đ i tư ng d li u. .NET Compact Framework không h tr nh ng ch c năng này. L p DataSet là l p duy nh t có th t tu n t hóa. Thông thư ng l p DataSet đư c s d ng như là m t cơ s d li u quan h trong b nh . Nó là m t ý tư ng cho b đ m d li u nh d a vào máy ch xa trong khi duy trì c u trúc quan h c a d li u. DataSet có th lưu tr t t c các ki u d li u cơ b n trên .NET Compact Framework. http://voer.edu.vn/content/m49327/1.1/
  7. Thu vien Hoc Lieu Mo Viet Nam module: m49327 7 4 S d ng gói UDP Như đã đ c p, có hai ki u gói tin thư ng đư c s d ng đ truy n tin trên m ng. Ki u chung nh t, gói TCP ph i ch n cho g n như t t c các trư ng h p b i vì nó đ m b o r ng d li u đ n không b hư h ng ho c ngư c l i tr l i tín hi u l i n u có m t v n đ gì mà không th s a ch a. Gói tin UDP r t h u ích cho các ng d ng dòng th i gian th c. Gói tin UDP khác gói tin TCP trong cách mà chúng k t n i, giao th c TCP là giao th c hư ng k t n i, đi u này có nghĩa là chúng ta c n k t n i v i m t socket trên máy tính xa trư c khi chúng ta có th g i ho c nh n d li u b ng socket. Giao th c k t n i không yêu c u b t kỳ k t n i nào đư c thi t l p trư c khi có g n g i ho c nh n d li u. N u không có m t l ng nghe trên đ a ch IP và c ng nơi mà gói UDP đư c g i, sau đó gói tin đơn gi n là b m t. Cách đơn gi n nh t đ n làm vi c v i gói UDP là s d ng l p UdpClient, l p này đư c .NET Compact Framework h tr . L p UdpClient cho phép các l p trình viên g i các byte t i nhóm xa. UdpClient cho phép ngư i phát tri n nh n byte t nhóm xa ho c t b t kỳ ngư i nào c g ng g i d li u t i c ng mà UdpClient l ng nghe. Quan tâm đ n các c u trúc và phương th c đư c UdpClient s d ng sau: - void Connect(String hostname, Int32 port) Thi t l p k t n i t i m t máy tính có đ a ch IP tương ng đư c ch ra b i tên máy ch (hostname) và s hi u c ng (port). Sau đó s d ng phương th c Send(Byte[] dgram, Int32 bytes) s g i d li u đ n v trí đư c ch ra trong phân k t n i. Phương th c này tr v ki u void b i vì không có khái ni m k t n i thành công khi s d ng gói UDP. Phương th c này ch đơn thu n là t o đ g i d li u t i m t đ a ch IP và s hi u c ng. - void Connect(IPAddress addr, Int32 port) Gi ng như phương th c trư c, ngo i tr cho phép b n ch ra máy tính xa b ng IPAddress và port. Đo n mã ví d : l_UdpClient.Connect(IPAddress.Parse("172.68.25.34"), 9981) • void Connect(IPEndpoint endPoint) K t n i v i máy xa b ng cách ch ra endPoint. - Int32 Send(Byte[] dgram, Int32 bytes, IPEndPoint endPoint) G i t t c bytes c a b đ m dgram t i máy tính có đ a ch IP và c ng đư c ch ra trong endPoint. - Send(Byte[] dgram, Int32 bytes, String hostname, Int32 port) G i t t c các bytes c a b đ m dgram t i máy tính có đ a ch IP tương ng v i hostname và c ng, như trong đo n mã ví d sau: Send(aBuffer, aBuffer.Length, "www.mycomputer.net", 9981) Phương th c trên tr v s byte g i. - Send(Byte[] dgram, Int32 bytes) G i t ng s byte c a b đ m t i máy ch xa đươc ch ra trong phương th c k t n i. Đ s d ng thành ph n n p ch ng, chúng ta trư c ti n ph i g i Connect, vì v y UdpClient bi t nơi g i gói UDP. Phương th c này tr v s byte g i đư c. • Receive(ref IPEndPoint remoteEP) Đ i đ nh n d li u t EndPoint. Chúng ta có th t o m t EndPoint tham chi u đ n m t đ a ch IP và c ng, ho c chúng ta có th thi t l p EndPoint đ nh n d li u t b t kỳ đ a ch IP và port. EndPoint đư c c p nh t sau khi d li u đư c nh n cho bi t nơi d li u đ n. Vi t mã cho UdpClient Đo n mã này mô t cách thi t l p m t UdpClient, sau đó g i gói tin UDP t i máy tính có đ a ch IP là 192.168.0.200, c ng 8758. Chú ý là thông qua g i phương th c UdpClient.Connect(). UdpClient bi t nơi g i gói tin UDP khi UdpClient.Send() đư c g i, nhưng không có k t n i liên t c. http://voer.edu.vn/content/m49327/1.1/
  8. Thu vien Hoc Lieu Mo Viet Nam module: m49327 8 IPEndPoint senderIP = new IPEndPoint(IPAddress.Parse("192.168.0.200"), Convert.ToInt32(8758)); UdpClient l_UdpClient = new UdpClient(); l_UdpClient.Connect(senderIP); for (int i = 0; i < 20; i++) l_UdpClient.Send(Encoding.ASCII.GetBytes("Hello_UDP_1"), Encoding.ASCII.GetBytes("Hello_UDP_1").Leng System.Threading.Thread.Sleep(1000); Sau đây đo n mã t o m t vòng l p. M i l n l p c a kh i l p và l ng nghe trên c ng 8758 đ n khi nó nh n m t gói tin t b t kỳ đ a ch IP nào. IPEndPoint listenerIP = new IPEndPoint(IPAddress.Any, 8758); UdpClient listener = new UdpClient(listenerIP); for (int i = 0; i < Convert.ToInt16(this.txtMaxPackets.Text); i++) { // Now receive the three datagrams from the listener IPEndPoint receivedIPInfo = new IPEndPoint(IPAddress.Any, 0); byte[] data = listener.Receive(ref receivedIPInfo); this.textBox1.Text += ("GOT: " + Encoding.ASCII.GetString(data, 0, data.Length) + "FROM: " + receivedIPInfo.ToString()); } 5 K thu t Multicasting v i gói tin UDP UDPClient có th d dàng c u hình đ broadcast t i nhi u đ a ch IP ho c t i gói nh n t nhi u multicast đ a ch IP. T m t multicast đ a ch IP đư c thao tác b ng m t máy ch , cái này duy trì m t danh sách multicast subscribers. Khi m t gói đư c g i t i m t multicast IP address, máy ch g i m t b n sao c a gói tin t i đ a ch IP c a nhi u máy khách, máy đã đư c tán thành. G i gói Multicast Đ g i gói UDP t i nhi u m t multicast đ a ch IP, không c n ch rõ hành đ ng đư c yêu c u. Đơn gi n là g i gói tin như trong ví d “Vi t mã cho UDP client”. Nh n gói Multicast Đ nh n gói multicast, trư c tiên chúng ta ph i đ ng ý cùng máy ch , máy ch đư c thao tác multicast đ a ch IP. Chúng ta có đ ng ý đ multicast đ a ch IP, chúng ta có th l ng nghe gói tin t multicast đ a ch IP trong cách như là cho b t kỳ đ a ch khác. Khi m t ai đó g i m t gói t i multicast đ a ch IP, máy ch tr l i t i t t c m i ngư i trên danh sách đ ng ý. Đ đ ng ý m t multicast đ a ch IP, làm theo các bư c sau: Bư c 1: T o m t IPAddress, đây là m t đi m đ multicast đ a ch IP. Bư c 2: G i UdpClient.JoinMultiCastGroup() C g ng nh n thông tin t multicast đ a ch IP s nh n gói tin tr l i t multicast máy ch . Đây là thành ph n n p ch ng JoinMultiCastGroup h tr trên .NET Compact Framework: - JoinMultiCastGroup(IPAddress multicastAddr) K t n i m t nhóm multicast multicastAddr. - JoinMultiCastGroup(IPAddress multicastAddr, int maxHops) K t n i m t nhóm multicast t i multicastAddr nhưng ch nh n gói mà đư c tao ra b i maxHops. Ví d : IPAddress l_multicastAddress = new IPAddress("172.68.0.22"); // Only receive multicast packets that have traveled // for 40 or less hops l_UDPClient.JoinMulticastGroup(l_multicastAddress, 40); http://voer.edu.vn/content/m49327/1.1/
  9. Thu vien Hoc Lieu Mo Viet Nam module: m49327 9 Đ không tán thành t m t multicast đ a ch IP, g i UDPClient.DropMulticastGroup() như sau: l_UDPClient.DropMulticastGroup(l_multicastAddress); 6 Truy n thông v i máy ch xa thông qua giao th c HTTP Chúng ta hãy th o lu n làm th nào làm vi c v i socket đ truy n d li u gi a máy khách và máy ch b ng cách s d ng gói TCP ho c UDP. Trong m i trư ng h p chúng ta đã đưa ra giao th c truy n thông. Ví d , ng d ng qu n lý chat đư c s d ng m t giao th c, đ i tư ng ChatPacket đư c t o ra thành các byte và g i thông qua k t n i m ng. Trong ví d Remote Hello và UDPHello g i m t chu i qua l i. Có r t nhi u máy ch trên Internet, các máy ch này có r t nhi u giao th c truy n thông, HTTP, các giao th c này đư c s d ng trên WWW. Khi s d ng giao th c HTTP, có r t nhi u qui t c đ làm th nào máy khách liên l c v i máy ch và làm th nào đ máy khách có th đòi h i b t kỳ lúc nào. D li u mà máy ch HTTP tr v cho đ n khi m t thi t l p gói tin TCP, nhưng s can thi p thông qua t t c thông tin liên k t giao th c là m t công vi c h t s c bu n t . M t giao d ch cùng v i máy ch HTTP có c u trúc như sau: Bư c 1: Máy khách k t n i v i máy ch HTTP. Bư c 2: Máy ch HTTP tr l i. Bư c3: Máy khách yêu c u d li u b ng cách s d ng GET ho c yêu c u v trí d li u b ng cách s d ng l nh POST. Bư c4: Máy ch tr v thông tin yêu c u và d dàng đưa ra mã l i n u yêu c u c a máy khách không th tho mãn. Ví d , mã l i ph bi n là 404 đư c tr v n u máy khách c g ng GET m t file không t n t i. Bư c 5: Bư c 4 có s l n l p tuỳ ý. Bư c 6: Máy khách đóng k t n i. M i l n máy khách t o yêu c u ho c máy ch tr l i, m t k t n i socket m i k t n i v i máy ch đư c t o. L p HttpWebRequest đư c t ch c t t c quá trình x lý ph c t p cùng v i quá trình tác đ ng đ n máy ch HTTP. HttpWebRequest có th thao tác nh ng thao tác sau: [U+F0B7] Kh i t o m t k t n i v i máy ch HTTP [U+F0B7] Nh n k t qu tr v t máy ch HTTP [U+F0B7] Tr v m t dòng lưu tr d li u đư c máy ch HTTP g i tr v như là k t qu chúng ta yêu c u. S d ng HttpWebRequest Đ s d ng l p HttpWebRequest đ download thông tin t máy ch HTTP, làm theo các bư c sau: Bư c 1: T o m t th hi n c a l p Uri đ ch đ a ch (URL) c a máy ch Bư c 2: Cài đ t m t HttpWebRequest b ng cách s d ng Uri c a bư c 1. Bư c 3: Yêu c u HttpWebRequest tr v k t qu t Web Server trong m u c a l p Stream. Bư c 4: Dùng n i dung c a Stream. Đo n mã ví d v HttpWebRequest L p HttpWebRequest làm gi m công vi c ph c t p khi giao ti p v i máy ch thông qua HTTP trong b n bư c trên. Uri l_Uri = new Uri("http://www.myserver.com"); HttpWebRequest l_WebReq = (HttpWebRequest)WebRequest.Create(l_Uri); HttpWebResponse l_WebResponse =(HttpWebResponse)l_WebReq.GetResponse(); Stream l_responseStream = l_WebResponse.GetResponseStream(); StreamReader l_SReader = new StreamReader(l_responseStream); // Do something with l_SReader. For example, if you downloaded a // Web page, you could // extract the HTML code that came in the response and paint it on // the screen. http://voer.edu.vn/content/m49327/1.1/
  10. Thu vien Hoc Lieu Mo Viet Nam module: m49327 10 7 Truy n thông v i máy ch xa thông qua giao th c HTTPS Giao th c HTTPS cho phép gi i quy t đ m b o xu t hi n t i Web sites. .NET Compact Framework b sung thêm HttpWebRequest có kh năng truy c p máy ch b ng giao th c HTTPS. 8 Truy n thông qua thi t b c ng IrDA R t nhi u Pocket PC và các thi t b Windows CE khác có s n c ng h ng ngo i (IrDA). .NET Compact Framework bao g m các l p đ l p trình d a vào c ng IrDA. Truy n thông IrDA gi a hai máy tính, m t máy khách (client) và m t máy ch (server). Máy ch thư ng k t n i t i máy khách trong vùng c a c ng h ng ngo i. K t n i máy ch thư ng đư c xác đ nh b i tên máy ch và ID thi t b . Máy khách có th trong vùng c a r t nhi u máy đ ngh k t n i IrDA. M i thi t b trong vùng có th giao ti p có m t ID và tên duy nh t. Li t kê các máy khách thông qua các k t n i s n sàng, ch n m t, và giao giao ti p cùng v i yêu c u c a máy tính xa. Giao ti p qua c ng h ng ngo i tìm th y cùng v i thông qua các s ki n: Bư c1: M t thi t b cung c p m t ho c nhi u d ch v t i các máy khác trong vùng c ng IrDA c a nó. Thi t b đư c xác đ nh thông qua tên và ID c a thi t b . Đ ch v cung c p đư c xác đ nh thông qua tên. Bư c2: M t thi t b khách mu n m m t danh sách li t k t n i thông qua t t c các thi t b trong vùng c a thi t b khách. Bư c3: M t l a ch n máy khách c a các thi t b s n sàng và k t n i t i m t m t d ch v c a đư c cung c p b i thi t b đã ch n. S d ng IrDAClient đ truy c p c ng IrDA Đ i tư ng trung tâm cho k t n i IrDA trên .NET Compact Framework là IrDAClient. Cùng v i s giúp đ c a nhi u l p h tr đư c th o lu n, IrDAClient có th làm vi c như m t máy ch ho c máy khác. IrDAClient có th đư c s d ng tìm ki m các k t n i s n sàng ho c các k t n i đư c cung c p trên các thi t b khác. IrDAClient và các l p liên quan IrDA t p trung trong thư vi n có tên là System.Net.IrDA.dll. Chúng ta ph i thêm m t tham chi u đ s d ng thư vi n này trong d án trư c khi có th s d ng. Đ thêm thư vi n, vào menu Project-> Add References. Trong h p tho i, b m đúp chu t vào nhãn có tên System.Net.IrDA và b m OK. M t k t n i đư c t o ra cùng v i m t nhóm xa, IrDAClient cung c p phương th c GetStream(), phương th c này đưa ra m t th hi n Stream cùng v i chương trình có th đ c và ghi d li u. K t n i t i c ng IrDA như m t máy khách Khi k t n i như m t IrDA khách, nó b l m dung như là ngư i phát tri n, chúng ta bi t tên c a thi t b cùng v i cái mà chúng ta mu n k t n i. Chương trình ph i l p thông qua t t c các thi t b s n sàng và ch n m t cái cùng v i d ch v yêu c u. Chúng ta làm theo các bư c sau: Bư c 1: T o m t k t n i IrDAClient. Bư c 2: Nh n danh sách các thi t b s n sàng k t n i b ng cách g i IrDAClient.DiscoverDevices. Phương th c DiscoverDevices tr v m t m ng các đ i tư ng IrDADeviceInfo. Bư c3: Duy t m i IrDADeviceInfo trong m ng đ tìm ra các thi t b s n sàng đư c ng d ng s k t n i. Bư c4: N u yêu c u c a thi t b đư c tìm th y, sau đó k t n i t i b ng cách g i phương th c IrDAClient.Connect(). Thông qua tên c a d ch v đ k t n i t i. Bư c 5: S d ng IrDAClient đ k t n i. Ví d : Đo n mã sau nh n đư c t ng d ng ví d . Đo n mã li t kê t t c thi t b s n sàng và c g ng k t n i t i m t thi t b đư c cung c p b i m t d ch v có tên là IRDA_CHAT_SERVER. Nó là m t k t n i có m t chat server xa đ i m t ai đó k t n i và chat. m_IrDAClient = new IrDAClient(); bool l_foundAnyDevice = false; int MAX_DEVICES = 5; http://voer.edu.vn/content/m49327/1.1/
  11. Thu vien Hoc Lieu Mo Viet Nam module: m49327 11 // Find out who’s out there to connect with... IrDADeviceInfo[] l_DevsAvailable = m_IrDAClient.DiscoverDevices(MAX_DEVICES); // Show a MessageBox telling user every device we see out there foreach (IrDADeviceInfo l_devInfo in l_DevsAvailable) { l_foundAnyDevice = true; MessageBox.Show(l_devInfo.DeviceName, "Discovered IrDA device"); // Now try to connect to the devices, hoping it offers a service // named "IRDA_CHAT_SERVER" try { } // Assume that first device is offering a service that we // want IrDAEndPoint chatEndPoint = new IrDAEndPoint( l_DevsAvailable[0].DeviceID, "IRDA_CHAT_SERVER"); m_IrDAClient.Connect(chatEndPoint); MessageBox.Show("Connected to chat server!", "Ready to chat"); m_Connected = true; break; } catch (SocketException exc) {} } // m_IrdaClient can now be read from or written to. Th i t l p m t k t n i IrDA n h ư là m t máy c h Đ thi t l p k t n i IrDA như là m t thi t b , làm theo các bư c sau: Bư c 1: t o m t th hi n c a IrDAListener, thông qua tên c a thi t b trong c u trúc. Bư c 2: G i phương th c Start() trên IrDAListener. Bư c3: G i phương th c IrDAListener.AcceptIrDAClient() đ nh n m t th hi n c a IrDAClient khi m t ai đó k t n i. Bư c 4: S d ng IrDAClient đ giao ti p v i các thi t b tham gia giao ti p. Th i t l p k t n i như m t thi t b ch , ví d : Đây là đo n mã l nh ví d l y t ng d ng ví d IrDAChat. Nó demo làm th nào đ s d ng m t IrDAListener đ cung c p m t k t n i g i IRDA_CHAT_SERVER t các thi t b khác và đ i m t ai đó k t n i. IrDAListener l_IrDAListener = new IrDAListener("IRDA_CHAT_SERVER"); // Listen for anyone who wants to connect l_IrDAListener.Start(); // And now pull the first queued connection request out as an // IrDAClient m_IrDAClient = l_IrDAListener.AcceptIrDAClient(); MessageBox.Show("Accepted a connection", "Ready to chat"); Đ c d l i u t m t IrDAClient M t IrDAClient đư c k t n i v i các thi t b xa cùng tham gia giao ti p, kh năng đ c d li u đ t đư c theo cách như nhau dù k t n i ch hay khách, như sau: Bư c 1: T o m t StreamReader thông qua Stream đã liên k t cùng v i IrDAClient trong c u trúc StreamReader. http://voer.edu.vn/content/m49327/1.1/
  12. Thu vien Hoc Lieu Mo Viet Nam module: m49327 12 Bư c 2: Đ c d li u t StreamReader. Đ cd li u t IrDAClient : đo n mã ví d : l_StreamReader = new StreamReader(this.m_IrDAClient.GetStream(), System.Text.Encoding.ASCII); // Read a line of text and paint it into a GUI this.lbInText.Items.Add(l_StreamReader.ReadLine()); l_StreamReader.Close(); Ghi d l i u vào IrDAClient Once an IrDAClient is connected to a remote party, writing data is achieved the same way whether connected as a server or as a client, as follows: Bư c1: T o StreamWriter thông qua Stream liên k t cùng IrDAClient trong c u trúc StreamWriter. Bư c 2: Ghi d li u vào StreamWriter. Ghi d l i u vào IrDAClient : đo n mã ví d : Sau đây là đo n mã ví d l y t ng d ng ví d IrDAChat. Đo n mã vi t m t dòng văn b n, cái đó yêu l y đư c t giao di n ngư i s d ng, đ lu ng đ t đư c t IrDAClient. // Grab a reference to the stream in the m_IrDAClient and send the // text to it. StreamWriter l_StreamWriter = new StreamWriter(this.m_IrDAClient.GetStream(), System.Text.Encoding.ASCII); l_StreamWriter.WriteLine(this.txtSendText.Text); l_StreamWriter.Close(); http://voer.edu.vn/content/m49327/1.1/
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2