1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lập Trình Mạng Nâng Cao - Xử Lý Sự Kiện (Event)

47 408 0

Đ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

Định dạng
Số trang 47
Dung lượng 1,13 MB

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

Nội dung

Nguyễn Vũ – IT Faculty, Viet Han Friendship IT College 6 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

Trang 1

XỬ LÝ SỰ KIỆN (EVENT)

LẬP TRÌNH MẠNG NÂNG CAO

Trang 2

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

2

Mô hình xử lý sự kiện trong Windows

 Được thể hiện như sau:

Trang 3

 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:

Mô hình xử lý sự kiện trong Windows

Trang 4

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

4

Ví dụ:

button1.Click += new EventHandler(Thongbao);

private void button1_Click(object sender, EventArgs e) {

Trang 5

THREAD

Trang 6

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

6

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

Trang 7

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

Trang 8

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

8

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)

Trang 9

 Tạo một luồng trong C#:

Trang 10

Nguyễn Vũ – IT Faculty, Viet Han Friendship

int i;

for (i = 0; i < 10; i++) {

Console.WriteLine(" thread 1: {0}", i); Thread.Sleep(2000); }

} void Counter2() {

int i;

for (i = 0; i < 10; i++) {

Console.WriteLine("thread 2: {0}", i); Thread.Sleep(3000);

} } }

Trang 11

 Đ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:

Sử dụng Thread trong chương trình Server

Receive data Send data }

Close socket

Server

Client

Trang 12

Nguyễn Vũ – IT Faculty, Viet Han Friendship

Trang 13

Sử dụng Thread để gửi nhận dữ liệu

Trang 14

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

14

SOCKET KHÔNG ĐỒNG BỘ

LẬP TRÌNH MẠNG NÂNG CAO

Trang 15

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:

Socket không đồng bộ - ví dụ

Trang 16

Nguyễn Vũ – IT Faculty, Viet Han Friendship

Trang 17

 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

Socket không đồng bộ

Trang 18

Nguyễn Vũ – IT Faculty, Viet Han Friendship

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()

Socket không đồng bộ

Trang 19

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)

Trang 20

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

20

 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);

}

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);

}

Trang 21

The BeginConnect() and EndConnect() Methods:

Trang 22

Nguyễn Vũ – IT Faculty, Viet Han Friendship

public static void Connected(IAsyncResult iar){

Socket sock = (Socket)iar.AsyncState;

Socket không đồng bộ

Trang 23

The BeginSend() and EndSend() Methods:

Dạng của BeginSend():

IAsyncResult BeginSend(byte[] buffer, int offset, int size,

SocketFlags sockflag, AsyncCallback callback, object state)

private static void SendData(IAsyncResult iar)

{ Socket server = (Socket)iar.AsyncState;

int sent = server.EndSend(iar);

Socket không đồng bộ

Trang 24

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

24

The BeginSendTo() and EndSendTo() Methods

Dùng cho Socket không hướng kết nối

Trang 25

The BeginSendTo() and EndSendTo() Methods

Dạng của EndSendTo():

int EndSendTo(IAsyncResult iar)

The BeginReceive() and EndReceive() Methods:

Trang 26

Nguyễn Vũ – IT Faculty, Viet Han Friendship

Socket remote = (Socket)iar.AsyncState;

int recv = remote.EndReceive(iar);

string receivedData = Encoding.ASCII.GetString(data, 0, recv);

Console.WriteLine(stringData);

}

Socket không đồng bộ

Trang 27

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);

Socket không đồng bộ

Trang 28

Nguyễn Vũ – IT Faculty, Viet Han Friendship

Socket remote = (Socket)iar.AsyncState;

int recv = remote.EndReceiveFrom(iar);

string stringData = Encoding.ASCII.GetString(data, 0, recv);

Console.WriteLine(stringData);

}

Socket không đồng bộ

Trang 30

Nguyễn Vũ – IT Faculty, Viet Han Friendship

sock.Close();

}

}

Trang 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ộ

 Đố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

Trang 32

Nguyễn Vũ – IT Faculty, Viet Han Friendship

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();

}

}

Trang 33

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();

}

Trang 34

Nguyễn Vũ – IT Faculty, Viet Han Friendship

Console.Write("Press Enter to stop");

string data = Console.ReadLine();

}

Trang 35

IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 9050);

string hostname = Dns.GetHostName();

byte[] data = Encoding.ASCII.GetBytes(hostname);

Trang 36

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

36

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.

224.0.0.0–224.0.0.255 Local network control block

224.0.1.0–224.0.1.255 Internetwork control block

Trang 37

 Một số địa chỉ Multicast:

Kỹ thuật IP Multicasting

Trang 38

Nguyễn Vũ – IT Faculty, Viet Han Friendship

Trang 39

Kỹ thuật IP Multicasting

 Có hai kỹ thuật Multicast được sử dụng:

 Central Server:

Trang 40

Nguyễn Vũ – IT Faculty, Viet Han Friendship

Trang 41

Socket Multicasting trong Net

 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

Trang 42

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

42

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"));

Trang 43

Socket Multicasting trong Net

Gửi dữ liệu Multicast

Trang 44

Nguyễn Vũ – IT Faculty, Viet Han Friendship

public static void Main() {

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

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();

}

}

Trang 45

Socket Multicasting trong Net

Multicast với lớp UdpClient:

Trang 46

Nguyễn Vũ – IT Faculty, Viet Han Friendship

IT College

46

Socket Multicasting trong Net

UdpClient Multicast Receiver

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();

}

}

Trang 47

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();

}

Ngày đăng: 23/10/2015, 19:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w