1 / 12

UDP Socket Programming

UDP Socket Programming. UDP SOCKET. Mô hình lập trình Socket phi kết nối. Phương thức Connect() không cần dùng trong chương trình UDP Client. Giao thức phi kết nối UDP không đảm bảo dữ liệu được truyền tới đích.

brice
Download Presentation

UDP Socket Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UDP Socket Programming

  2. UDP SOCKET Mô hình lập trình Socket phi kết nối • Phương thức Connect() không cần dùng trong chương trình UDP Client. • Giao thức phi kết nối UDP không đảm bảo dữ liệu được truyền tới đích. • Socket phi kết nối cung cấp hai phương thức SendTo() và ReceiveFrom() để thực hiện việc kết nối. 2

  3. UDP SOCKET 1. Tạo ra IPEndPoint Lập trình phía Server • UDP là một giao thức phi kết nối do đó chỉ làm hai việc để tạo ra một ứng dụng Server gởi và nhận dữ liệu: • Tạo ra Socket • Kết nối Socket đến một IPEndPoint cục bộ • IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000); • Socket newsock = new Socket(AddressFamily.InterNetwork, • SocketType.Dgram, ProtocolType.Udp); • newsock.Bind(ipep); 3. Kết nối Socket với IPEndPoint 2. Tạo ra Socket Để thực hiện truyền thông phi kết nối, phải chỉ ra SocketType là Datagram và ProtocolType là Udp. 3

  4. UDP SOCKET Lập trình phía Server using System; using System.Net; using System.Net.Sockets; using System.Text; class SimpleUdpSrvr {public static void Main() { int recv; byte[] data = new byte[1024]; IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); newsock.Bind(ipep); Console.WriteLine("Dang cho Client ket noi den..."); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)(sender); recv = newsock.ReceiveFrom(data, ref Remote); Console.WriteLine("Thong diep duoc nhan tu {0}:", Remote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 4

  5. UDP SOCKET Lập trình phía Server string welcome = "Hello Client"; data = Encoding.ASCII.GetBytes(welcome); newsock.SendTo(data, data.Length, SocketFlags.None, Remote); while (true) { data = new byte[1024]; recv = newsock.ReceiveFrom(data, ref Remote); Console.WriteLine(Encoding.ASCII.GetString(data, 0,recv)); newsock.SendTo(data, recv, SocketFlags.None, Remote); } } } Sau khi gắn Socket vào một IPEndPoint, Server sẽ chờ Client kết nối đến, khi Client kết nối đến, Client sẽ gởi thông điệp đến Server. Server sau khi nhận được thông điệp từ Client nó sẽ gởi câu chào ngược lại cho Client. 5

  6. UDP SOCKET Lập trình phía Client using System; using System.Net; using System.Net.Sockets; using System.Text; class SimpleUdpClient { public static void Main() { byte[] data = new byte[1024]; string input, stringData; IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5000); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); string welcome = "Hello server"; data = Encoding.ASCII.GetBytes(welcome); server.SendTo(data, data.Length, SocketFlags.None, ipep); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)sender; data = new byte[1024]; int recv = server.ReceiveFrom(data, ref Remote); Console.WriteLine("Thong diep duoc nhan tu {0}:", Remote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 6

  7. UDP SOCKET Lập trình phía Client while (true) { input = Console.ReadLine(); if (input == "exit") break; server.SendTo(Encoding.ASCII.GetBytes(input), Remote); data = new byte[1024]; recv = server.ReceiveFrom(data, ref Remote); stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); } Console.WriteLine("Dang dong client"); server.Close(); } } • Client gởi thông điệp đến Server và chờ câu chào trả về từ Server. • Chương trình SimpleUdpClient đọc dữ liệu nhập vào từ bàn phím rồi gởi đến và chờ dữ liệu từ Server gởi trả về. Khi Server gởi trả dữ liệu về, Client sẽ lấy thông điệp đó ra và hiển thị lên màn hình. • Chương trình UDP Server sẽ không biết khi nào Client ngắt kết nối do đó khi Client ngắt kết nối thì phải gởi thông điệp ngắt kết nối cho Server biết. 7

  8. UDP SOCKET Phân biệt các thông điệp UDP • Mỗi phương thức ReceiveFrom() chỉ đọc dữ liệu được gởi từ một phương thức SendTo(). • Khi UDP Socket có thể nhận thông điệp từ bất kỳ Client nào. • Để UDP Socket phân biệt được Client gởi dữ liệu thì mỗi thông điệp phải được chứa trong một gói tin riêng và được đánh dấu bởi thông tin IP của thiết bị gởi. Chương trình UDP Server using System; using System.Net; using System.Net.Sockets; using System.Text; class TestUdpSrvr { 8

  9. UDP SOCKET Chương trình UDP Server public static void Main() { int recv; byte[] data = new byte[1024]; IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); newsock.Bind(ipep); Console.WriteLine("Dang cho client ket noi den..."); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint tmpRemote = (EndPoint)(sender); recv = newsock.ReceiveFrom(data, ref tmpRemote); Console.WriteLine("Thong diep duoc nhan tu {0}:",tmpRemote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); string welcome = "Xin chao client"; data = Encoding.ASCII.GetBytes(welcome); newsock.SendTo(data, data.Length, SocketFlags.None,tmpRemote); for (int i = 0; i < 5; i++) { data = new byte[1024]; recv = newsock.ReceiveFrom(data, ref tmpRemote); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); } newsock.Close(); } } 9

  10. UDP SOCKET Chương trình UDP Client using System; using System.Net; using System.Net.Sockets; using System.Text; class TestUdpClient { public static void Main() { byte[] data = new byte[1024]; IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5000); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); string welcome = "Xin chao Server"; data = Encoding.ASCII.GetBytes(welcome); server.SendTo(data, data.Length, SocketFlags.None, ipep); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint tmpRemote = (EndPoint)sender; data = new byte[1024]; int recv = server.ReceiveFrom(data, ref tmpRemote); Console.WriteLine("Thong diep duoc nhan tu {0}:", tmpRemote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); 10

  11. UDP SOCKET Chương trình UDP Client server.SendTo(Encoding.ASCII.GetBytes("Thong diep 1"), tmpRemote); server.SendTo(Encoding.ASCII.GetBytes("Thong diep 2"), tmpRemote); server.SendTo(Encoding.ASCII.GetBytes("Thong diep 3"), tmpRemote); server.SendTo(Encoding.ASCII.GetBytes("Thong diep 4"), tmpRemote); server.SendTo(Encoding.ASCII.GetBytes("Thong diep 5"), tmpRemote); Console.WriteLine("Dang dong client"); server.Close(); } } Kết quả ở Server UDP Server nhận biết được các thông điệp riêng rẽ 11

  12. Q&A

More Related