Lập Trình Mạng Nội dung môn học Chương 1: Các khái niệm cơ bản về mạng máy tính Chương 2: Lập trình mạng với .NET Chương 3: Xây dựng ứng dụng mạng Chương 4: Hệ phân tán TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA: CÔNG NGHỆ THÔNG TIN Lập Trình Mạng 3.4 UDP socket Udp socket hay còn gọi là socket hướng không kết nối Trong các chương trình ứng dụng mạng sử dụng giao thức Udp khác với Tcp đó là việc trao đổi dữ liệu giữa client và server không cần thiết lập một kết nối trước Udp socket sử dụng SocketType là dgram và ProtocolType là UDP để gửi nhận dữ liệu giữa client và server Dữ liệu được truyền đi bởi Udp socket không đáng tin cậy, điều này có nghĩa là có thể xảy ra mất mát, tuy nhiên ưu điểm của nó là quá trình trao đổi dữ liệu diễn ra nhanh hơn so với Tcp socket TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA: CÔNG NGHỆ THÔNG TIN Lập Trình Mạng 3.4.1 Các bước xây dựng ứng dụng Udp socket Viết chương trình phía máy chủ Tạo một socket Liên kết với một IPEndPoint cục bộ Gửi nhận dữ liệu theo giao thức đã thiết kế Đóng socket Viết chương trình phía máy khách Xác định địa chỉ của server Tạo socket Gửi nhận dữ liệu theo giao thức dã thiết kế Đóng socket TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA: CÔNG NGHỆ THÔNG TIN Lập Trình Mạng 3.4.2 sơ đồ chương trình sử dụng Udp socket TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA: CÔNG NGHỆ THÔNG TIN Lập Trình Mạng 3.4.2 Xây dựng chương trình sử dụng Udp socket Viết chương trình phía server static void Main(string[] args) { IPAddress _ipaddress = IPAddress.Any; IPEndPoint _ipendpoint = new IPEndPoint(_ipaddress, 2022); Socket _socketserver = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _socketserver.Bind(_ipendpoint); // Ở Udp socket ta cần tạo một Remote IPEndPoint từ xa để nhận dữ liệu về IPEndPoint _remoteipendpoint = new IPEndPoint(IPAddress.Any, 0); EndPoint _endpoint = (EndPoint)_remoteipendpoint; byte[] _data = new byte[1024]; int _recv = _socketserver.ReceiveFrom(_data, ref _endpoint); string _s = Encoding.Unicode.GetString(_data, 0, _recv); Console.WriteLine("Nhận về từ client: ", _s); _data = Encoding.Unicode.GetBytes("Xin chào Client"); _socketserver.SendTo(_data, _endpoint); TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA: CÔNG NGHỆ THÔNG TIN Lập Trình Mạng while (true) { _data = new byte[1024]; _recv = _socketserver.ReceiveFrom(_data, ref _endpoint); _s = Encoding.Unicode.GetString(_data, 0, _recv); if (_s.ToUpper().Equals("QUIT")) { break; } Console.WriteLine(_s); _data = new byte[1024]; _data = Encoding.Unicode.GetBytes(_s); _socketserver.SendTo(_data, 0, _data.Length, SocketFlags.None, _endpoint); } Console.ReadKey(); _socketserver.Close(); } TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA: CÔNG NGHỆ THÔNG TIN Lập Trình Mạng Viết chương trình phía client class Program { static void Main(string[] args) { Console.InputEncoding = Encoding.Unicode; Console.OutputEncoding = Encoding.Unicode; IPAddress _ipaddress = IPAddress.Parse("127.0.0.1"); IPEndPoint _ipendpoint = new IPEndPoint(_ipaddress, 2022); Socket _socketclient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); string _s = "Hello Server!..."; byte[] _data = new byte[1024]; _data = Encoding.Unicode.GetBytes(_s); _socketclient.SendTo(_data, _ipendpoint); //tạo endpoint nhận dữ liệu về từ server EndPoint _endpoint = (EndPoint)_ipendpoint; _data = new byte[1024]; int _recv = _socketclient.ReceiveFrom(_data, ref _endpoint); _s = Encoding.Unicode.GetString(_data, 0, _recv); Console.WriteLine("Nhận về từ Server: {0}", _s); TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA: CÔNG NGHỆ THÔNG TIN Lập Trình Mạng while (true) { _s = Console.ReadLine(); _data = new byte[1024]; _data = Encoding.Unicode.GetBytes(_s); _socketclient.SendTo(_data, _endpoint); if (_s.ToUpper().Equals("QUIT")) { break; } _data = new byte[1024]; _recv = _socketclient.ReceiveFrom(_data, ref _endpoint); _s = Encoding.Unicode.GetString(_data, 0, _recv); Console.WriteLine(_s); } Console.ReadKey(); _socketclient.Close(); }