Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 47 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
47
Dung lượng
1,13 MB
Nội dung
LẬP TRÌNH MẠNG NÂNG CAO
XỬ LÝ SỰ KIỆN (EVENT)
Nguyễn Vũ – IT Faculty, Viet Han Friendship 1
Mô hình xử lý sự kiện trong Windows
Được thể hiện như sau:
Nguyễn Vũ – IT Faculty, Viet Han Friendship 2
Mô hình xử lý sự kiện trong Windows
Trong mô hình xử lý sự kiện, hai từ khoá hay
được dùng đó là event và delegate.
Sự kiện Sender và
Receiver trong
windows được mô tả
trong mô hình sau:
Nguyễn Vũ – IT Faculty, Viet Han Friendship 3
Mô hình xử lý sự kiện trong Windows
Ví dụ:
button1.Click += new EventHandler(Thongbao);
private void button1_Click(object sender, EventArgs e)
{
int a = Convert.ToInt32(textBox1.Text);
int b = Convert.ToInt32(textBox2.Text);
c = a + b;
textBox3.Text = c.ToString();
}
private void Thongbao(object sender, EventArgs e)
{
MessageBox.Show("Tong cua hai so la:" + c.ToString());
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 4
THREAD
Nguyễn Vũ – IT Faculty, Viet Han Friendship 5
Sử dụng Thread trong ứng dụng mạng
Một số khái niệm:
Đa nhiệm (multitasking): là khả năng hệ điều hành làm
nhiều công việc tại 1 thời điểm.
Tiến trình (process): HĐH cấp phát bộ nhớ và tài nguyên
riêng biệt để chạy 1 ứng dụng nào đó.
Luồng (Thread): Trong hệ thống, một
tiến trình có thể có 1 hoặc nhiều chuỗi
thực hiện tách biệt nhau và có thể chạy
đồng thời. Mỗi chuỗi thực hiện này gọi
là 1 thread.
Nhờ luồng ta có thể thiết kế các Server
đáp ứng các yêu cầu một cách đồng
thời.
Nguyễn Vũ – IT Faculty, Viet Han Friendship 6
Sử dụng Thread trong chương trình .Net
Để sử dụng Thread trong .Net ta sử dụng NameSpace
System.Threading
Một số phương thức thường dùng:
Tên phương thức
Ý nghĩa
Abort()
Kết thúc Thread
Join()
Buộc chương trình phải chờ cho Thread kết thúc
thì mới thực hiện tiếp các câu lệnh sau Join
Resume()
Tiếp tục chạy Thread đã bị tạm ngưng
Sleep()
Static method: tạm dừng thread trong một khoảng
thời gian
Start()
Bắt đầu chạy Thread
Suspend()
Tạm ngưng Thread
Nguyễn Vũ – IT Faculty, Viet Han Friendship 7
Sử dụng Thread trong chương trình .Net
Sau khi Thread bắt đầu, các phương thức: Abort(), Join(),
Resume(), Sleep() mới có thể được thực hiện.
Một số thuộc tính thường dùng:
Tên phương thức
Ý nghĩa
CurrentThread
Đây là phương thức tĩnh. Trả vể Thread
hiện hành đang chạy.
IsAlive
Trả về giá trị cho biết trạng thái thực thi của
Thread hiện hành
ThreadState
Lấy về trạng thái của Thread (đang dừng hay
chạy)
Nguyễn Vũ – IT Faculty, Viet Han Friendship 8
Sử dụng Thread trong chương trình .Net
Tạo một luồng trong C#:
{
……
Thread newThread=new Thread(new
ThreadStart(newMethod));
newThread.Start();
…….
}
void newMethod()
{
...
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 9
Sử dụng Thread trong chương trình .Net
void Counter1()
using System;
{
using System.Threading;
int i;
class ThreadSample
for (i = 0; i < 10; i++)
{
{
public static void Main()
Console.WriteLine(" thread 1: {0}", i);
{
Thread.Sleep(2000); }
ThreadSample ts = new
}
ThreadSample();
void Counter2()
}
{
public ThreadSample()
int i;
{
for (i = 0; i < 10; i++)
int i;
{
Thread newCounter1 = new
Console.WriteLine("thread 2: {0}", i);
Thread(new ThreadStart(Counter1));
Thread.Sleep(3000);
Thread newCounter2 = new
}
Thread(new ThreadStart(Counter2));
newCounter1.Start();
}
newCounter2.Start();
}
}
Ví dụ:
Nguyễn Vũ – IT Faculty, Viet Han Friendship 10
Sử dụng Thread trong chương trình Server
Đa luồng hay được sử dụng trong các chương trình Server,
tại 1 thời điểm Server chấp nhận nhiều kết nối đến Client
Mô hình ứng dụng đa luồng:
Create Socket
Bind Socket
Listen on Socket
While {
Accept connect
Create Thread
}
Server
Client
Send Wellcome
While {
Receive data
Send data
}
Close socket
Nguyễn Vũ – IT Faculty, Viet Han Friendship 11
Sử dụng Thread trong chương trình Server
Ví dụ: Chương trình Client-Server để trả về ngày, giờ
của Server?
Nguyễn Vũ – IT Faculty, Viet Han Friendship 12
Sử dụng Thread để gửi nhận dữ liệu
Nguyễn Vũ – IT Faculty, Viet Han Friendship 13
LẬP TRÌNH MẠNG NÂNG CAO
SOCKET KHÔNG ĐỒNG BỘ
Nguyễn Vũ – IT Faculty, Viet Han Friendship 14
Socket không đồng bộ - ví dụ
Socket không đồng bộ tức là lời gọi hàm sẽ trở về ngay
bất chấp dữ liệu gửi/nhận hoặc yêu cầu kết nối đã hoàn tất
hay chưa.
Mô hình Client-Server cho phương thức không đồng bộ
như sau:
Nguyễn Vũ – IT Faculty, Viet Han Friendship 15
Socket không đồng bộ - ví dụ
Mô hình Client/Server cho phương thức không đồng bộ
như sau:
Nguyễn Vũ – IT Faculty, Viet Han Friendship 16
Socket không đồng bộ
Lớp AsyncCallback:
Lớp này cho phép các phương thức bắt đầu 1
hàm không đồng bộ và thay thế 1 phương thức uỷ
quyền khi hàm không đồng bộ hoàn thành
Những phương thức Socket ko đồng bộ tách những
hàm phổ biến của lập trình mạng thành 2 phần:
Phương thức Begin để bắt đầu 1 hàm và đăng ký
với phương thức AsyncCallback
Phương thức End kết thúc 1 hàm khi phương thức
AsyncCallback được gọi
Nguyễn Vũ – IT Faculty, Viet Han Friendship 17
Socket không đồng bộ
Mỗi phương thức Begin có 1 phương thức End được kết hợp để hoàn
thành 1 hàm, các phương thức được liệt kê trong bảng sau:
Requests Started By… Description of Request
Requests Ended
BY…
BeginAccept()
To accept an incoming connection
EndAccept()
BeginConnect()
To connect to a remote host
EndConnect()
BeginReceive()
To retrieve data from a socket
EndReceive()
BeginReceiveFrom()
To retrieve data from a specific
remote host
EndReceiveFrom()
BeginSend()
To send data from a socket
EndSend()
BeginSendTo()
To send data to a specific remote host
EndSendTo()
Nguyễn Vũ – IT Faculty, Viet Han Friendship 18
Socket không đồng bộ
Để chấp nhận 1 kết nối đến từ 1 client ở xa, ta dùng
phương thức BeginAccept(). Theo dạng như sau:
IAsyncResult BeginAccept(AsyncCallback callback, object
state)
Ví dụ:
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
sock.Bind(iep);
sock.Listen(5);
sock.BeginAccept(new AsyncCallback(CallAccept), sock);
Nguyễn Vũ – IT Faculty, Viet Han Friendship 19
Socket không đồng bộ
Sau khi phương thức BeginAccept() kết thúc và 1 kết nối xảy
ra thì phương thức AsyncCallback được gọi
Phương thức AsyncCallback bao gồm phương thức
EndAccept() để kết thúc việc chấp nhận 1 socket.
Đây là cú pháp của phương thức EndAccept():
Socket EndAccept(IAsyncResult iar);
Phương thức End thường được viết theo dạng sau:
private static void CallAccept(IAsyncResult iar)
{
Socket server = (Socket)iar.AsyncState;
Socket client = server.EndAccept(iar);
. . .
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 20
Socket không đồng bộ
The BeginConnect() and EndConnect() Methods:
Dạng của BeginConnect():
IAsyncResult BeginConnect(EndPoint ep, AsyncCallback
callback, Object state)
Ví dụ về BeginConnect():
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iep = new
IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
newsock.BeginConnect(iep, new AsyncCallback(Connected),
newsock);
Nguyễn Vũ – IT Faculty, Viet Han Friendship 21
Socket không đồng bộ
The BeginConnect() and EndConnect() Methods:
Dạng của EndConnect():
EndConnect(IAsyncResult iar)
Ví dụ về EndConnect():
public static void Connected(IAsyncResult iar){
Socket sock = (Socket)iar.AsyncState;
try {
sock.EndConnect(iar);
}
catch (SocketException) {
Console.WriteLine("Unable to connect to host");
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 22
Socket không đồng bộ
The BeginSend() and EndSend() Methods:
Dạng của BeginSend():
IAsyncResult BeginSend(byte[] buffer, int offset, int size,
SocketFlags sockflag, AsyncCallback callback, object state)
Ví dụ:
sock.BeginSend(data,0, data.Length, SocketFlags.None, new
AsyncCallback(SendData), sock);
Dạng của EndSend():
int EndSend(IAsyncResult iar)
Ví dụ:
private static void SendData(IAsyncResult iar)
{ Socket server = (Socket)iar.AsyncState;
int sent = server.EndSend(iar);
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 23
Socket không đồng bộ
The BeginSendTo() and EndSendTo() Methods
Dùng cho Socket không hướng kết nối
Dạng của BeginSendTo():
IAsyncResult BeginSendTo(byte[] buffer, int offset, int size,
SocketFlags sockflag, EndPoint ep, AsyncCallback
callback, object state)
Ví dụ:
IPEndPoint iep = new
IPEndPoint(IPAddress.Parse("192.168.1.6"), 9050);
sock.BeginSendTo(data, 0, data.Length, SocketFlags.None,
iep, new AsynCallback(SendDataTo), sock);
Nguyễn Vũ – IT Faculty, Viet Han Friendship 24
Socket không đồng bộ
The BeginSendTo() and EndSendTo() Methods
Dạng của EndSendTo():
int EndSendTo(IAsyncResult iar)
The BeginReceive() and EndReceive() Methods:
Dạng của BeginReceive()
IAsyncResult BeginReceive(byte[] buffer, int offset, int size,
SocketFlags sockflag, AsyncCallback callback, object state)
Ví dụ:
sock.BeginReceive(data, 0, data.Length,
SocketFlags.None, new AsyncCallback(ReceivedData),
sock);
Nguyễn Vũ – IT Faculty, Viet Han Friendship 25
Socket không đồng bộ
The BeginReceive() and EndReceive() Methods:
EndReceive():
void ReceivedData(IAsyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
string receivedData = Encoding.ASCII.GetString(data, 0,
recv);
Console.WriteLine(stringData);
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 26
Socket không đồng bộ
The BeginReceiveFrom() and EndReceiveFrom() Methods:
Dùng cho Socket không hướng kết nối
Dạng của BeginReceiveFrom():
IAsyncResult BeginReceiveFrom(byte[] buffer, int offset, int
size, SocketFlags sockflag, ref EndPoint ep, AsyncCallback
callback, object state)
Ví dụ:
sock.BeginReceive(data, 0, data.Length, SocketFlags.None,
ref iep, new AsyncCallback(ReceiveData), sock);
Nguyễn Vũ – IT Faculty, Viet Han Friendship 27
Socket không đồng bộ
The BeginReceiveFrom() and EndReceiveFrom() Methods:
EndReceiveFrom():
void ReceiveData(IasyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceiveFrom(iar);
string stringData = Encoding.ASCII.GetString(data, 0,
recv);
Console.WriteLine(stringData);
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 28
Kỹ thuật IP Multicasting
BroadCasting là gì?
Dùng để gửi một gói tin đến tất cả các nút trong
mạng
Để thực hiện hình thức quảng bá, địa chỉ đến của
gói tin sẽ là địa chỉ quảng bá.
Có hai loại là:
Local BroadCast
Global BroadCast
Ví dụ: Cho mạng lớp B có địa chỉ IP là 192.168.0.0
có SubNet Mask là 255.255.0.0, địa chỉ Local
Broadcast là: 192.168.255.255
Nguyễn Vũ – IT Faculty, Viet Han Friendship 29
Kỹ thuật IP Multicasting
Chương trình khai báo và gửi gói tin Broadcast:
class BadBroadcast {
public static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9050);
byte[] data = Encoding.ASCII.GetBytes("This is a test message");
sock.SendTo(data, iep);
sock.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 30
Kỹ thuật IP Multicasting
Dùng kỹ thuật BroadCasting để gửi dữ liệu đến nhiều
máy trong mạng cục bộ
Đối với một ứng dụng C # để gửi các gói dữ liệu
Broadcast, ta dùng phương thức SetSocketOption() của
lớp Socket :
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);
Nguyễn Vũ – IT Faculty, Viet Han Friendship 31
Kỹ thuật IP Multicasting
Dùng kỹ thuật BroadCasting để gửi dữ liệu đến nhiều máy trong
mạng cục bộ
Gửi gói dữ liệu:
class Broadcst {
public static void Main() {
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050);
IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 9050);
string hostname = Dns.GetHostName();
byte[] data = Encoding.ASCII.GetBytes(hostname);
sock.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);
sock.SendTo(data, iep1);
sock.SendTo(data, iep2);
sock.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 32
Kỹ thuật IP Multicasting
Nhận gói dữ liệu:
class RecvBroadcst {
public static void Main() {
Socket sock = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to receiye…");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
data = new byte[1024];
recv = sock.ReceiveFrom(data, ref ep);
stringData = Encoding.ASCII.GetString(data, 0, recy);
Console.WriteLine("received: {0} from: {1}",stringData, ep.ToString());
sock.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 33
Kỹ thuật IP Multicasting
Sử dụng Broadcast Packet để thông báo có sự hiện diện của
Server
class Advertise {
public static void Main()
{
Advertise server = new Advertise();
}
public Advertise()
{
Thread advert = new Thread(new ThreadStart(sendPackets));
advert.IsBackground = true;
advert.Start();
Console.Write("Press Enter to stop");
string data = Console.ReadLine();
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 34
Kỹ thuật IP Multicasting
Sử dụng Broadcast Packet để thông báo có sự hiện diện của
Server
void sendPackets()
{
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);
IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9050);
string hostname = Dns.GetHostName();
byte[] data = Encoding.ASCII.GetBytes(hostname);
while (true)
{
sock.SendTo(data, iep);
Thread.Sleep(6000);
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 35
Kỹ thuật IP Multicasting
Multicasting là gì?
Một địa chỉ Multicasting cho phép thiết bị gửi dữ liệu tới một tập
xác định trước các host, được biết đến như các nhóm Multicast,
trong các mạng con khác nhau.
Range
Assignment
224.0.0.0–224.0.0.255
Local network control block
224.0.1.0–224.0.1.255
Internetwork control block
224.0.2.0–224.0.255.0
AD-HOC block
224.1.0.0–224.1.255.255
ST multicast groups
224.2.0.0–224.2.255.255
SDP/SAP block
224.252.0.0–224.255.255.255
DIS transient block
225.0.0.0–231.255.255.255
Reserved
232.0.0.0–232.255.255.255
Source-specific multicast block
233.0.0.0–233.255.255.255
GLOP block
234.0.0.0–238.255.255.255
Reserved
239.0.0.0–239.255.255.255
Administratively scoped block
Nguyễn Vũ – IT Faculty, Viet Han Friendship 36
Kỹ thuật IP Multicasting
Một số địa chỉ Multicast:
Nguyễn Vũ – IT Faculty, Viet Han Friendship 37
Kỹ thuật IP Multicasting
Có hai kỹ thuật Multicast được sử dụng:
Peer to peer:
Nguyễn Vũ – IT Faculty, Viet Han Friendship 38
Kỹ thuật IP Multicasting
Có hai kỹ thuật Multicast được sử dụng:
Central Server:
Nguyễn Vũ – IT Faculty, Viet Han Friendship 39
Kỹ thuật IP Multicasting
Gửi multicast Packets qua Router
Nguyễn Vũ – IT Faculty, Viet Han Friendship 40
Socket Multicasting trong .Net
Sử dụng phương thức SocketOption():
Phương thức SocketOption() dùng để:
Thêm một socket vào nhóm Multicast
Loại bỏ một socket khỏi nhóm Multicast
SetSocketOption(SocketOptionLevel,SocketOption
Name, optionValue)
SocketOptionName:
AddMembership
DropMembership
Nguyễn Vũ – IT Faculty, Viet Han Friendship 41
Socket Multicasting trong .Net
Sử dụng phương thức SocketOption():
Ví dụ thêm một Socket vào nhóm Multicast
224.100.0.1 ta viết như sau:
sock.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership, new
MulticastOption(IPAddress.Parse("224.100.0.1"));
Nguyễn Vũ – IT Faculty, Viet Han Friendship 42
Socket Multicasting trong .Net
Gửi dữ liệu Multicast
class MultiSend{
public static void Main()
{
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new
IPEndPoint(IPAddress.Parse("224.100.0.1"), 9050);
byte[] data = Encoding.ASCII.GetBytes("This is a test
message");
server.SendTo(data, iep);
server.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 43
Socket Multicasting trong .Net
Nhận dữ liệu Multicast
class MultiRecv{
public static void Main() {
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
Console.WriteLine("Ready to receive…");
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
EndPoint ep = (EndPoint)iep;
sock.Bind(iep);
sock.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership,
new MulticastOption(IPAddress.Parse("224.100.0.1")));
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
sock.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 44
Socket Multicasting trong .Net
Multicast với lớp UdpClient:
JoinMulticastGroup()
DropMulticastGroup()
JoinMulticastGroup() là phương thức overload
JoinMulticastGroup(IPAddress)
JoinMulticastGroup(IPAddress,int)
Nguyễn Vũ – IT Faculty, Viet Han Friendship 45
Socket Multicasting trong .Net
UdpClient Multicast Receiver
class UdpClientMultiRecv
{
public static void Main()
{
UdpClient sock = new UdpClient(9050);
Console.WriteLine("Ready to receive…");
sock.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
byte[] data = sock.Receive(ref iep);
string stringData = Encoding.ASCII.GetString(data, 0, data.Length);
Console.WriteLine("received: {0} from: {1}", stringData, iep.ToString());
sock.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 46
Socket Multicasting trong .Net
UdpClient Multicast Sender
class UdpClientMultiSend
{
public static void Main()
{
UdpClient sock = new UdpClient();
IPEndPoint iep = new
IPEndPoint(IPAddress.Parse("224.100.0.1"), 9050);
byte[] data = Encoding.ASCII.GetBytes("This is a test
message");
sock.Send(data, data.Length, iep);
sock.Close();
}
}
Nguyễn Vũ – IT Faculty, Viet Han Friendship 47
[...]... dụng Thread trong chương trình Server Ví dụ: Chương trình Client-Server để trả về ngày, giờ của Server? Nguyễn Vũ – IT Faculty, Viet Han Friendship 12 Sử dụng Thread để gửi nhận dữ liệu Nguyễn Vũ – IT Faculty, Viet Han Friendship 13 LẬP TRÌNH MẠNG NÂNG CAO SOCKET KHÔNG ĐỒNG BỘ Nguyễn Vũ – IT Faculty, Viet Han Friendship 14 Socket không đồng bộ - ví dụ Socket không đồng bộ tức là lời gọi hàm sẽ trở... chương trình Server Đa luồng hay được sử dụng trong các chương trình Server, tại 1 thời điểm Server chấp nhận nhiều kết nối đến Client Mô hình ứng dụng đa luồng: Create Socket Bind Socket Listen on Socket While { Accept connect Create Thread } Server Client Send Wellcome While { Receive data Send data } Close socket Nguyễn Vũ – IT Faculty, Viet Han Friendship 11 Sử dụng Thread trong chương trình. .. Lớp này cho phép các phương thức bắt đầu 1 hàm không đồng bộ và thay thế 1 phương thức uỷ quyền khi hàm không đồng bộ hoàn thành Những phương thức Socket ko đồng bộ tách những hàm phổ biến của lập trình mạng thành 2 phần: Phương thức Begin để bắt đầu 1 hàm và đăng ký với phương thức AsyncCallback Phương thức End kết thúc 1 hàm khi phương thức AsyncCallback được gọi Nguyễn Vũ – IT Faculty, Viet... tin đến tất cả các nút trong mạng Để thực hiện hình thức quảng bá, địa chỉ đến của gói tin sẽ là địa chỉ quảng bá Có hai loại là: Local BroadCast Global BroadCast Ví dụ: Cho mạng lớp B có địa chỉ IP là 192.168.0.0 có SubNet Mask là 255.255.0.0, địa chỉ Local Broadcast là: 192.168.255.255 Nguyễn Vũ – IT Faculty, Viet Han Friendship 29 Kỹ thuật IP Multicasting Chương trình khai báo và gửi gói... Multicast, trong các mạng con khác nhau Range Assignment 224.0.0.0–224.0.0.255 Local network control block 224.0.1.0–224.0.1.255 Internetwork control block 224.0.2.0–224.0.255.0 AD-HOC block 224.1.0.0–224.1.255.255 ST multicast groups 224.2.0.0–224.2.255.255 SDP/SAP block 224.252.0.0–224.255.255.255 DIS transient block 225.0.0.0–231.255.255.255 Reserved 232.0.0.0–232.255.255.255 Source-specific multicast... dụ Socket không đồng bộ tức là lời gọi hàm sẽ trở về ngay bất chấp dữ liệu gửi/nhận hoặc yêu cầu kết nối đã hoàn tất hay chưa Mô hình Client-Server cho phương thức không đồng bộ như sau: Nguyễn Vũ – IT Faculty, Viet Han Friendship 15 Socket không đồng bộ - ví dụ Mô hình Client/Server cho phương thức không đồng bộ như sau: Nguyễn Vũ – IT Faculty, Viet Han Friendship 16 Socket không đồng bộ Lớp... sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); Nguyễn Vũ – IT Faculty, Viet Han Friendship 31 Kỹ thuật IP Multicasting Dùng kỹ thuật BroadCasting để gửi dữ liệu đến nhiều máy trong mạng cục bộ Gửi gói dữ liệu: class Broadcst { public static void Main() { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast,... Console.WriteLine("received: {0} from: {1}",stringData, ep.ToString()); sock.Close(); } } Nguyễn Vũ – IT Faculty, Viet Han Friendship 33 Kỹ thuật IP Multicasting Sử dụng Broadcast Packet để thông báo có sự hiện diện của Server class Advertise { public static void Main() { Advertise server = new Advertise(); } public Advertise() { Thread advert = new Thread(new ThreadStart(sendPackets)); advert.IsBackground... advert.Start(); Console.Write("Press Enter to stop"); string data = Console.ReadLine(); } Nguyễn Vũ – IT Faculty, Viet Han Friendship 34 Kỹ thuật IP Multicasting Sử dụng Broadcast Packet để thông báo có sự hiện diện của Server void sendPackets() { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast,... Encoding.ASCII.GetBytes("This is a test message"); sock.SendTo(data, iep); sock.Close(); } } Nguyễn Vũ – IT Faculty, Viet Han Friendship 30 Kỹ thuật IP Multicasting Dùng kỹ thuật BroadCasting để gửi dữ liệu đến nhiều máy trong mạng cục bộ Đối với một ứng dụng C # để gửi các gói dữ liệu Broadcast, ta dùng phương thức SetSocketOption() của lớp Socket : Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); ... Nguyễn Vũ – IT Faculty, Viet Han Friendship 20 Socket không đồng The BeginConnect() and EndConnect() Methods: Dạng BeginConnect(): IAsyncResult BeginConnect(EndPoint ep, AsyncCallback callback,... SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("224 .10 0.0 .1" )); Nguyễn Vũ – IT Faculty, Viet Han Friendship 42 Socket Multicasting Net Gửi liệu Multicast class MultiSend{ public static... AsyncCallback(Connected), newsock); Nguyễn Vũ – IT Faculty, Viet Han Friendship 21 Socket không đồng The BeginConnect() and EndConnect() Methods: Dạng EndConnect(): EndConnect(IAsyncResult