Tải bản đầy đủ (.docx) (45 trang)

Đề tài: Chia sẻ file ảnh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.19 MB, 45 trang )


Chương 1: Cơ sở lý thuyết
1.1. Windows Form
1.1.1. Sự quan trọng của Windows Forms
Window forms chính là cửa sổ của một màn hình ứng dụng. Nó chứa đựng
các dữ liệu, control trên đó và là cửa sổ giao tiếp giữa người sử dụng (user) và máy
tính.
1.1.2. Những điểm căn bản của Windows Forms
Một Windows Forms thật sự là một class. Trong .NET không có từ đặc biệt
như “form module” để dùng cho nó.
Vì một form là một class nên ta không thể load nó mà không chỉ rõ ra. Tức là
trong VB6 nếu ta Show hay dùng đến một Form thì nó tự động được loaded. Chẳng
những thế thôi, cái class Form2 được dùng như mộtvariable Form2 luôn, tức là
by default ta có một Object tên Form2. Trong .NET ta phải khai báo (declare) một
variable tên myForm2 chẳng hạn rồi instantiate form ấy như một Object của
Form2 trước khi dùng nó.
Tất cả mọi form đều thừa kế từ class System.Windows.Forms.Form.
Giống như tất cả các classes trong .NET Framework, Windows Forms có
constructors và destructors. Constructor của form tên là void New, đại khái giống
như Sub Form_Load trong VB6. Destructor của form tên là void Dispose, đại khái
giống như Sub Form_Unload trong VB6.
Cái visual forms designer của VS.NET nhét rất nhiều code để instantiate form
và đặt các controls vào form. Đó là code mà đáng lẽ ta phải tự viết nếu ta dùng
notepad để lập trình. Phần code nầy thay thế cái phần nằm ở đầu tệp .frm của VB6
để diễn tả các visual components của form. Mỗi lần ta thêm bớt các controls hay
thay thế các properties của controls trên form thì code generated cho form được
thay đổi theo. Do đó bạn nên tránh sửa đổi code ấy, trừ khi biết chắc mình đang
làm gì, hay là bạn làm một phiên bản trước khi thay đổi để nếu lỡ kẹt thì restore
code cũ.
Event được xử lý bằng cách linh động hơn. Các events chứa nhiều tin tức
hơn. Một Event có thể được xử lý bởi nhiều controls cùng một lúc và mỗi control có


một cách xử lý khác nhau. Ngược lại, nhiều Events khác nhau có thể được xử lý
bằng một Event Handler duy nhất.
1.1.3. Các sự kiện của Forms
Trong lập trình visual, điều quan trọng nhấn là sử lý các sự kiện. Khi lập
trình, thường ta chỉ thực hiện các thao tác kéo thả là ta có thể tạo được một giao
diện hoàn chỉnh. Tuy nhiên, để giao diện đó hoạt động được theo đúng yêu cầu của
ta thì ta buộc phải lập trình cho các sự kiện của từng hay nhiều control trên form
đó.
Form có rất nhiều sự kiện, ở đây chỉ giới thiệu đến một số sự kiện quan trọng của
form:
– Sự kiện Load:
private void Form3_Load(object sender, System.EventArgs e)
{
//Code xử lý cho quá trình form được load lên.
}
– Sự kiện Closed:

private void Form3_Closed(object sender, System.EventArgs e)
{
//Code xử lý cho quá trình form đang được đóng lại.
}
– Sự kiện Click (khi ta click mouse lên trên form):
private void Form3_Click(object sender, System.EventArgs e)
{
//Code xử lý khi chuột được click lên trên form.
}
Để tạo 1 hàm xử lý sự kiện (event function), cách tốt nhất là bạn bấm double
click chuột lên đối tượng mà bạn muốn tạo hàm để xử lý sự kiện đó. Tuy nhiên, cách
này thì VS .Net nó chỉ phát sinh 1 hàm xử lý sự kiện mặc định của nó (với form thi
hàm mặc định xử lý sự kiện là Form_Load. Do vậy, bạn hãy mở cửa sổ properties

của đối tượng đó, chọn tab các events, nó sẽ liệt kê các events mà đối tượng có.
Sau đó bạn double click vào sự kiện mà bạn muốn, và một hàm xử lý sự kiện được
tạo ở bên phần source code và bạn chỉ việc viết thêm code để xử lý sự kiện này mà
không cần quan tâm đến bằng cách nào mà hệ thống kiểm tra và xử lý nó.
1.1.4. Chọn startup form
Khi một ứng dụng có nhiều form, vấn đề ở chỗ là form nào sẽ là form được
chạy đầu tiên khi bạn run một ứng dụng?
Để chỉ định StartUp Form của chương trình, bạn cần phải mở cửa sổ
Properties của Project để đánh vào Startup Object. Bạn có thể làm điều ấy bằng
cách dùng IDE menu command Project | Properties hay right click tên của
Project trong Solution Explorer rồi chọn Properties.
Lưu ý:
Vì trong 1 ứng dụng, thường chỉ có 1 form làm entry form (startup form)
nên VS .Net sẽ tự set form đầu tiên của nó là form startup. Do đó, khi bạn thêm các
form sau thì form đó sẽ không là form startup nên khi bạn startup object, nó sẽ
không list ra cho bạn. Để có thể làm form startup, bạn phải thay đổi code ở bên
trong bằng cách chép đoạn mã này vào trong phần code:

static void Main()
{
Application.Run(new Form1());
}
Và thay tên Form (ở ví dụ trên là Form1) bằng tên form mà bạn muốn làm startup
form.
Ví dụ:
Hãy sử dụng Visual Studio .Net để tạo 1 project là FormLarger và tạo 1
form có giao diện giống như hình dưới và viết đoạn code để xử lý sự kiện khi click
chuột lên trên form (bất kỳ chỗ nào) thì 1 message box sẽ hiển thị và form sẽ lớn
thêm 50 pixels.
với các thuộc tính:


Caption Click OK, Form lớn ra!!!
FormBorderStyl
e
FixDialog
MinimizeBox false
MaximizeBox false
Bạn hãy thay đổi màu nền và thay đổi các đường viền (border) để nhận thấy được
sự khác nhau giữa các style của form.
Dưới đây là đoạn code để xử lý khi bạn click chuột lên trên form:

private void Form1_Click(object sender, System.EventArgs e)
{
MessageBox.Show(“Bạn mới click chuột lên trên form!\n” +
“Click Ok và form sẽ lớn hơn 50 pixels.”);
this.Height = this.Height + 50;
this.Width = this.Width + 50;
}
bạn có thể không cần xuống hàng ở câu lệnh Messagebox.Show()
Lưu ý: Nếu bạn đánh tiếng viện trên form (unicode) thì khi bạn save, nó sẽ yêu cầu
bạn chọn save unicode.
Để làm việc này bạn hãy:
Click chuộn vào form cần save, chọn menu file -> Save <tên form> As…

bạn hãy đánh vào ô file name là frmNhapSV và chọn save with Encoding… và
hộp hội thoại sẽ xuất hiện:
bạn hãy chọn Unicode (UTF-8 with signature) – Codepage 65001 và chọnOK.

Trong lập trình visual, form bao giờ cũng cần phải có tên để lập trình (form name)
và tên form để lưu trên đĩa. Để cho dễ dàng trong lập trình và quản lý, ta thường

hay lấy tên form để lập trình và tên form lưu trên đĩa giống nhau. Điều này giúp ta
có thể chỉ biết được là form này có tên là gì mà không cần phải mở của sổ
properties của nó lên.
1.2. Nút nhấn (Button)
Button control là một đối tượng nút nhấn được các nhà phát triển ngôn ngữ
lập trình sẵn và để trong thư viện của Visual Studio .Net. Button control cho phép
người dùng click chuột vào nó và nó sẽ thực thi một hay nhiều đoạn mã nào đó mà
cho người lập trình (chúng ta) chỉ định thông qua các events mà nó nhận được.
Khi một button được click thì nó sẽ sinh ra một số các sự kiện (events) như
Mouse Enter, MouseDown, MouseUp, v.v… và tuỳ với các sự kiện này mà chúng ta có
thể lựa viết các đoạn code để xử lý cho phù hợp.
1.2.1. Tạo một nút nhấn (button) trên form
Cách tạo nút nhấn rất đơn giản, ta chỉ việc kéo đối tượng button trên hộp
công cụ (toolbox) vào trong form, sau đó ta thay đổi tên (name), text (caption) và
kích thước của đối tượng đó cho phù hợp với yêu cầu.
Lưu ý:
Phần lớn những cách tạo đối tượng, thay đổi của thuộc tính, v.v… mọi thứ
mà ta làm bằng giao diện visual đều có thể làm bằng cách viết source code. Khi ta
làm bằng công cụ visual, công cụ visual sẽ tự genera code ra cho ta.
1.2.2. Các thuộc tính
Cũng như window form, button cũng có các thuộc tính riêng của nó. Tuy
nhiên vì mỗi đối tượng có rất nhiều thuộc tính, vì vậy ở đây ta chỉ đề cập đến một số
thuộc tính quan trọng và hay sử dụng nhiều nhất của đối tượng button. Dưới đây là
một số thuộc tính thông dụng của đối tượng button:

Tên Thuộc tính Giá Trị Diễn giải
Name Text Tên cho button
Text Text Chữ sẽ hiển thị trên button
Font Hộp hội thoại font Chọn font chữ cho text
(chữ hiển thị trên button)

BackColor Hộp màu Chọn màu nền cho button
ForeColor Hộp màu Chọn màu chữ cho button.
TextAlign TopLeft – TopCenter – TopRight Canh lề chữ: trên bên trái
– giữa phải.
MiddleLeft – MiddleCenter –
MiddleRight
ở giữa – bên trái – bên
phải
BottomLeft – BottomCenter –
BottomRight
bên dưới trái – giữa – phải
FlatStyle Flat Button sẽ bằng phẳng
Popup Giống Flat nhưng khi move
mouse lên trên nó thì
giống standard và khi bỏ
mouse ra thì nó trở lại như
cũ (Flat)
Standard Mặc định của hệ thống
System Giống standard nhưng sẽ
thay đổi theo hệ điều hành
BackGroundImag
e
đường dẫn file hình Hình bạn chỉ định sẽ làm
nền cho button. Nếu hình
không đủ lớn bằng button
thì hình sẽ lặp lại (giống
như bạn chọn chế độ Title
khi bạn set background
cho màn hình window).
Image đường dẫn file hình Hình sẽ làm nền cho

button
(giống như bạn chọn
Center khi set hình
background cho window).

Lưu ý:
Ở thuộc tính TextAlign, khi bạn bấm vào mũi tên sổ xuống trong cửa sổ
properties, nó sẽ hiện ra 1 giao diện đồ hoạ cho ta chọn các kiểu canh lề như hình
bên dưới.
Khi bạn chọn nút nào thì nút đó sẽ lõm xuống, đồng thời một dòng chữ sẽ
hiển thị ra cho bạn biết là bạn đã chọn kiểu canh lề nào.
1.2.3. Các sự kiện của button
Trong các sự kiện của button thì chỉ có sự kiện Click chuột là quan trong
nhất. Do đó, trong phần này ta cũng chỉ đi tìm hiểu sự kiện Click chuột.
Cách tạo:
Sự kiện click chuột là sự kiện mặc định của control button, do đó, bạn chỉ cần
double click chuột vào button cần tạo sự kiện là VS .Net sẽ mở cửa sổ source code
ra và tự động generate một hàm xử lý sự kiện click chuột cho bạn.

private void button1_Click(object sender, System.EventArgs e)
{
//Bạn sẽ đánh code cho phần xử lý sự kiện ở đây.
}
với button1_Click thì button1 chính là tên của control button mà bạn tạo sự kiện
Click chuột cho nó.
Ví dụ:
a) Hãy tạo 1 project có tên là Button và thiết kế form có 1 button giống như hình
bên dưới:
Với các thuộc tính:
Đối Tượng Thuộc Tính Giá Trị

Form Text
Name
Button
Mặc định
Button Text
Name
Click chuột vào đây!
Mặc định.

Và tạo một sự kiện click chuột cho button này.
Bạn double click chuột vào button, Visual Studio sẽ sinh ra cho bạn một hàm
để sử lý sự kiện click chuột vào button. Vì sự kiện Click là sự kiện mặc định của
button nên khi bạn double click vào thì sự kiện click cho button đó sẽ được tự động
sinh ra. Sau đó đánh thêm vào đoạn code sau:
private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show(“Xin chào các bạn!”);
}
MessageBox là đối tượng hiển thị các thông báo trên màn hình.
Lưu ý:
– Khi bạn muốn tạo 1 sự kiện cho một control nào đó, bạn chọn event trong
cửa sổ properties của đối tượng đó, và Visual Studio sẽ tự động chuyển sang màn
hình source code và 1 hàm xử lý sự kiện được tự động tạo ra cho bạn. Tuy nhiên, hệ
thống nó sẽ sinh ra nhiêu đoạn mã khác nhưng nó được cất dấu ở trong phần riêng
của form và được ẩn đi. Hình dưới:
+ Windows Form Designer generated code
Bạn có thể xem đoạn code bên trong bằng cách bấm chuột vào dấu +. Bạn có
thể thay đổi source code này theo ý mình nhưng tôi khuyên bạn không nên chỉnh
sửa nó trừ khi bạn biết rõ mình sửa nó để làm gì và với mục đích gì.
– Như đã trình bày ở trên, khi bạn đánh vào font chữ việt sự dụng font

unicode, bạn phải lưu form ở chế độ save as unicode (xem lại trên).
Bạn hãy chạy chương trình bằng cách bấm phím F5 để xem kết quả.
b) Hãy tạo 1 form gồm 2 button giống như hình dưới:
Khi button Xanh được bấm thì màu nền của form sẽ đổi sang màu xanh,
button Đỏ được bấm thì màu nền của form sẽ đổi sang màu đỏ, và button mặc định
được bấm thì màu nền của form lại trở về như lúc đầu.
Các thuộc tính:
Đối
Tượn
g
Thuộc Tính
Giá Trị
Form Name
Text
frmMauNen
Button Đổi Màu Nền Cho Form
Button Name
Text
btnXanh
Xanh
Button Name
Text
btnDo
Đỏ
Button Name
Text
btnMacDinh
Mặc Định
1.3. Nhãn
Nhãn là thành phần đơn giản nhất và cũng là một trong những thành phần

quan trọng nhất trong lập trình visual. Đối tượng nhãn (Label) chỉ để dùng trình
bày một chuổi văn bản thông thường nhằm mục đính mô tả thêm thông tin cho các
đối tượng khác. Ta cũng có thể dùng nhãn để làm công cụ đưa kết quả ra màn hình
dưới dạng một chuỗi.
1.3.1. Tạo một nhãn (Label) trên form
Cũng giống như button và hầu hết các control khác trong lập trình visual, để
tạo một nhãn trên form, ta chỉ cần kéo đối tượng nhãn từ hộp công cụ ToolBox vào
form.
1.3.2. Các thuộc tính thông dụng của nhãn (Label)
Nhìn chung, các thuộc tính của các đối tượng window form control cũng gần
gần như nhau. Do đó, các thuộc tính mà giống với thuộc tính như của control
button như name, text, font, backcolo, v.v… thì tôi sẽ không trình bày ra nữa. Sau
đây là một số thuộc tính thông dụng của nhãn (Label):

Tên Thuộc
tính
Giá Trị Diễn giải
BorderStyle None (mặc định) Không có đường viền
FixedSingle Có đường viền bao quanh
Fixed3D 3D, trông nó giống như bị lõm xuống (giống
textbox)
Đối với nhãn, ta cũng có thể sử dụng anchoring để chỉ định vị trí nhãn trên form khi
ta resize form.
1.3.3. Các sự kiện của nhãn
Trong lập trình Visual, mọi đối tượng đều có sự kiện cho riêng nó, tuy nhiên
đối với nhãn, ta thường không sử dụng sự kiện vì nhãn chỉ có chức năng thông
dụng là hiển thị một câu thông báo hay kết quả ra màn hình. Vì vậy ở đây ta cũng
không xét đến các sự kiện của nó.
1.4. Ô nhập (Textbox)
Textbox là đối tượng để nhập văn bản vào. Đây cũng là một trong những

control thông dụng nhất trong lập trình visual.
1.4.1. Các thuộc tính
Cũng giống như button và label, textbox cũng có những thuộc tính gần giống
với thuộc tính của 2 control mà ta đã được học qua. Dưới đây là bảng những thuộc
tính thông dụng nhất của textbox:

Tên Thuộc tính Giá Trị Diễn giải
MaxLength integer Chiều dài tối đa dữ liệu nhập (ký tự)
Multiline True
False
Cho hay không cho textbox cao lên để cho phép
nhập nhiều dòng.
PasswordChar character Nếu bạn muốn textbox này là 1 password field thì
bạn chỉ cần chỉ định character mà bạn muốn hiển
thị khi bạn nhập password vào thuộc tính này.
ReadOnly True
False
Cho hay không cho phép nhập liệu vào textbox
này.
RightToLeft Yes
No
Yes – Nếu bạn muốn canh lề phải dữ liệu nhập.
ScrollBar
Thuộc tính này chỉ có tác dụng khi bạn chọn Multiline= True NoneKhông có thanh
cuộn.HorizontalChỉ có thanh cuộn đứng.VerticalChỉ có thanh cuộn ngang.BothCó cả
2 thanh cuộn đứng và ngang.WordWrap
Thuộc tính này chỉ có tác dụng khi bạn chọn Multiline= TrueTrue
FalseTrue – Nếu bạn muốn khi nhập liệu vào textbox thì nó sẽ tự động xuống dòng
nếu như hết hàng.
1.4.2. Các sự kiện

Cũng như label, Textbox thường chức năng chính là để nhập liệu nên nó cũng
ít khi phải sử dụng các sự kiện nên ở phần này ta cũng không bàn về các sự kiện
của textbox
1.5. Danh sách
List cho phép ta tạo ra một danh sách các phần tử để lựa chọn. Nếu như số
lượng các phần tử lớn hơn số lượng mà danh sách có thể hiển thị trên màn hình
(do ta design danh sách có kích thước cao hay ngắn) thì một thanh cuộn sẽ tự động
thêm vào trong danh sách để cho ta có thể list qua hết các phần tử. Danh sách List
trình bày tất cả (hay một phần các phần tử tuỳ theo số lượng phần tử và độ dài
trong giao diện của List), ta có thể chọn ra một hay nhiều phần tử cùng một lúuc từ
danh sách để xử lý.
1.5.1. Các thuộc tính của Listbox
Từ phần này, các thuộc tính của các control mà nó giống với các thuộc tính ở
trên thì tôi không trình bày ra ở đây nữa.
Tên Thuộc
tính
Giá Trị Diễn giải
MultiColumn True
False (mặc định)
Cho phép hiển thị các item thành các cột thay
vì 1 cột như mặc định của nó
SelectionModeNone Không có item nào được chọn. Dách sách chỉ
để hiển thị xem mà thôi
One Chỉ có 1 item được phép chọn.
MultiSimple Có nhiều item được phép chọn cùng một lúc.
MultiExtended Giống như MultiSimple nhưng ta có thể dùng
phím như SHIFT, các phím mũi tên để chọn.
Sorted True
False
Sắp xếp danh sách theo thứ tự aphabet

Items Collection… Một hộp hội thoại cho phép bạn nhập vào
danh sách các item.
Khi bạn chọn Items Collection…, một hộp hội thoại String Collection Editor hiển thị
ra cho phép bạn nhập vào các items:

Đối với Listbox, bạn có thể sử dụng dữ liệu lấy tự database lên thay cho các dữ liệu
bạn nhập vào để làm danh sách.
1.5.2. Các sự kiện
Sự kiện quan trọng và hay sử dụng nhất của Listbox là SelectedIndexChange.
Sự kiện này được phát sinh khi bạn click chuột vào 1 item khác hay bạn dùng phím
mũi tên để di chuyển giữa các item.
1.6. Thanh công cụ (Toolbar)
Như đã trình bày ở phần Visual Studio .Net, thanh công cụ là tập hợp các nút
bấm mang biểu tượng chứa trong một thanh thườn đặt dưới menu. Các nút này
đảm nhận các chức năng thông dụng trong cấu trúc menu của VS.Net. Thanh công
cụ rất hữu ích, thay vì phải lần lượt chọn qua menu và menu con, ta nhấn một nút
bấm nào đó trong thanh công cụ để gọi một chức năng tương tự trên menu.
Xử lý sự kiện
Chỉ có một hàm xử lý sự kiện Toolbar, tlbDemo_ButtonClick, được dùng
cho tất cả các buttons. Ta phân biệt Button nào dựa vào Index của nó, giống giống
như một array of buttons trong VB6. Nếu user click button thứ nhất ta sẽ có
tlbDemo.Buttons.IndexOf(e.Button) bằng 0, lúc ấy ta sẽ Close form chính.
Chương 2: Lập trình mạng trong .Net framework
2.1. Socket hướng kết nối (TCP Socket)
Socket là một giao diện lập trình ứng dụng (API) mạng
Thông qua giao diện này chúng ta có thể lập trình điều khiển việc truyền thông giữa
hai máy sử dụng các giao thức mức thấp là TCP, UDP…
Socket là sự trừu tượng hoá ở mức cao, có thể tưởng tượng nó như là thiết bị truyền
thông hai chiều gửi - nhận dữ liệu giữa hai máy tính với nhau.
Các loại Socket

• Socket hướng kết nối (TCP Socket)
• Socket không hướng kết nối (UDP Socket)
• Raw Socket
Đặc điểm của Socket hướng kết nối
• Có 1 đường kết nối ảo giữa 2 tiến trình
• Một trong 2 tiến trình phải đợi tiến trình kia yêu cầu kết nối. Có thể sử dụng để
liên lạc theo mô hình Client/Server
• Trong mô hình Client/Server thì Server lắng nghe và chấp nhận một yêu cầu
kết nối
• Mỗi thông điệp gửi đều có xác nhận trở về Các gói tin chuyển đi tuần tự
Đặc điểm của Socket không hướng kết nối
• Hai tiến trình liên lạc với nhau không kết nối trực tiếp Thông điệp gửi đi phải
kèm theo địa chỉ của người nhận Thông điệp có thể gửi nhiều lần
• Người gửi không chắc chắn thông điệp tới tay người nhận
• Thông điệp gửi sau có thể đến đích trước thông điệp gửi trước đó.
Số hiệu cổng của Socket
• Để có thể thực hiện các cuộc giao tiếp, một trong hai quá trình phải công bố số
hiệu cổng của socket mà mình sử dụng.
• Mỗi cổng giao tiếp thể hiện một địa chỉ xác định trong hệ thống. Khi quá trình
được gán một số hiệu cổng, nó có thể nhận dữ liệu gởi đến cổng này từ các quá
trình khác.
• Quá trình còn lại cũng yêu cầu tạo ra một socket.
2.1.1. Giới thiệu về NameSpace System.Net và System.Net.Sockets
Cung cấp một giao diện lập trình đơn giản cho rất nhiều các giao thức mạng.
Có rất nhiều lớp để lập trình
Ta quan tâm lớp IPAdress, IPEndPoint, DNS, … Lớp IPAdress
Một số Field cần chú ý:
Any: Cung cấp một địa chỉ IP để chỉ ra rằng Server phải lắng nghe trên tất cả
các Card mạng
Broadcast: Cung cấp một địa chỉ IP quảng bá Loopback: Trả về một địa chỉ IP

lặp
AdressFamily: Trả về họ địa chỉ của IP hiện hành Lớp IPAddress
Một số phương thức cần chú ý:
Phương thức khởi tạo
IPAddress(Byte[])
IPAddress(Int64)
IsLoopback: Cho biết địa chỉ có phải địa chỉ lặp không Parse: Chuyển IP dạng
xâu về IP chuẩn
ToString: Trả địa chỉ IP về dạng xâu
TryParse: Kiểm tra IP ở dạng xâu có hợp lệ không?
Lớp IPEndPoint
Một số phương thức cần chú ý:
Phương thức khởi tạo
IPEndPoint (Int64, Int32)
IPEndPoint (IPAddress, Int32)
Create: Tạo một EndPoint từ một địa chỉ Socket
ToString : Trả về địa chỉ IP và số hiệu cổng theo khuôn dạng địaChỉ: Cổng, ví
dụ: 192.168.1.1:8080
Lớp DNS
Một số thành phần của lớp:
HostName: Cho biết tên của máy được phân giải
GetHostAddress: Trả về tất cả IP của một trạm
GetHostEntry: Giải đáp tên hoặc địa chỉ truyền vào và trả về đối tư
GetHostName: Lấy về tên của máy tính cục bộ
NameSpace System.Net.Sockets
Một số lớp hay dùng: TcpClient, UdpClient, TcpListener, Socket,
NetworkStream, …
Để tạo ra Socket
Socket(AddressFamily af, SocketType st, ProtocolType pt)
2.1.2. Viết chương trình cho máy chủ

Viết chương trình cho phía máy chủ
Tạo một Socket
Liên kết với một IPEndPoint cục bộ Lắng nghe kết nối
Chấp nhận kết nối
Gửi nhận dữ liệu theo giao thức đã thiết kế đóng kết nối sau khi đã hoàn thành
và trở về trạng thái lắng nghe chờ kết nối mới.
Viết chương trình cho phía máy chủ
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
Socket newsock = Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
newsock.Bind(ipep);
newsock.Listen(10);
Socket client = newsock.Accept();
//Gửi nhận dữ liệu theo giao thức đã thiết kế ……….
newsock.Close();
2.1.3. Viết chương trình cho phía máy khách
Viết chương trình cho phía máy khách
Xác định địa chỉ của Server
Tạo Socket
Kết nối đến Server
Gửi nhận dữ liệu theo giao thức đã thiết kế đóng Socket
Viết chương trình cho phía máy khách
IPEndPoint ipep = new IPEndPoint(Ipaddress.Parse("192.168.1.6"), 9050);
Socket server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,
ProtocolType.Tcp);
server.Connect(ipep);
2.1.4. Sử dụng các luồng nhập xuất với Socket
Từ Socket ta có thể tạo ra luồng để nhập xuất với Socket đó là sử dụng lớp
NetworkStream
Trên cở sở của NetworkStream ta có thể nối thêm các luồng để nhập xuất theo hướng

ký tự như StreamReader, StreamWriter
Sau đây là một ví dụ về chương trình Client/Server sử dụng luồng nhập xuất, chương
trình Server chép phép Client gửi lên yêu cầu, nếu yêu cầu là GetDate không phân biệt
chữ hoa chữ thường thì Server trả về cho Client ngày hiện tại, nếu yêu cầu là GetTime
không phan biệt hoa thường thì Server trả về giờ hiện tại, nếu là Quit thì Server ngắt
kết nối với Client, không phải các trường hợp trên thì thông báo không hiểu lênh.
2.2. Sử dụng các lớp hỗ trợ được xây dựng từ lớp Soket
2.2.1. Lớp TCPClient
Mục đích của lớp UDPClient ở trên là dùng cho lập trình với giao thức UDP,
với giao thức này thì hai bên không cần phải thiết lập kết nối trước khi gửi do vậy
mức độ tin cậy không cao. để đảm bảo độ tin cậy trong các ứng dụng mạng, người ta
còn dùng một giao thức khác, gọi là giao thức có kết nối : TCP (Transport Control
Protocol). Trên Internet chủ yếu là dùng loại giao thức này, ví dụ như Telnet, HTTP,
SMTP, POP3… để lập trình theo giao thức TCP, MS.NET cung cấp hai lớp có tên là
TCPClient và TCPListener.
- Các thành phần của lớp TcpClient
+ Phương thức khởi tạo:
+ Một số thuộc tính:
+ Một số phương thức:
2.2.2. Lớp TCPListener
TCPListerner là một lớp cho phép người lập trình có thể xây dựng các ứng
dụng Server (Ví dụ như SMTP Server, FTP Server, DNS Server, POP3 Server hay
server tự định nghĩa ….). Ứng dụng server khác với ứng dụng Client ở chỗ nó luôn
luôn thực hiện lắng nghe và chấp nhận các kết nối đến từ Client.
Các thành phần của lớp TcpListener:
+ Phương thức khởi tạo:
+ Các phương thức khác
2.3. Sử dụng Thread trong các ứ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

một thời điểm
• Tiến trình (Process): Khi chạy một ứng dụng, hệ điều hành sẽ cấp phát riêng
cho ứng dụng đó bộ nhớ và các tài nguyên khác. Bộ nhớ và tài nguyên vật lý
riêng biệt này được gọi là một tiến trình. Các tài nguyên và bộ nhớ của một
tiến trình thì chỉ tiến trình đó được phép truy cập.
Tuyến (Thread): Trong hệ thống, một tiến trình có thể có một 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 được
gọi là một tuyến (Thread). Trong một ứng dụng, Thread khởi tạo đầu tiên gọi là
Thread sơ cấp hay Thread chính.
2.3.1. 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
- Một số thuộc tính thường dùng:
2.3.2. Sử dụng Thread trong các chương trình Server
• Đa tuyên hay được ứng dụng trong các chương trình Server, các chương trình
đòi hỏi tại một thời điểm chấp nhận nhiều kết nối đến từ các Client.
• Để các chương trình Server có thể xử lý nhiều Client tại một thời điểm ta có
mô hình ứng dụng đa tuyến như sau:
2.3.3. Sử dụng Thread để gửi/nhận dữ liệu
Ứng dụng đa tuyến trong việc gửi nhận dữ liệu chúng ta viết chương trình Chat
theo giao thức TCP như sau:
Ứng dụng mô hình xử lý sự kiện của Windows và đa tuyến và Socket không
đồng bộ ta chỉ cần viết một chương trình sau đó dịch ra, ta chạy ứng dụng nhấn Listen
nó sẽ lắng nghe trong vai trò Server còn khi ta chạy và nhấn Connect nó sẽ đóng vai
trò Client và kết nối tới Server.
2.4. Giao thức FTP
2.4.1. Cơ bản về giao thức FTP
Giao thức FTP là một giao thức trao đổi file khá phổ biến Khái niệm và hoạt
động cơ bản của FTP:
Những người phát triển giao thức FTP cần phải cân bằng nhu cầu giữa việc phát triển

một bộ giao thức vừa có nhiều chức năng và vừa đơn giản trong triển khai. Do đó,
FTP không đơn giản như “đứa em trai” của nó - là giao thức TFTP. Hoạt động của
giao thức này có thể chia ra thành nhiều thành phần nhỏ, hoạt động cùng nhau để thực
hiện các công việc như khởi tạo kết nối, truyền thông tin điều khiển và truyền lệnh.
Nội dung mà bài viết này hướng tới là đưa tới người đọc những khái niệm quan trọng
nhất đằng sau giao thức FTP, cũng như giải thích tổng quan về nguyên lý hoạt động
của nó.
1 - Mô hình hoạt động của FTP, các thành phần trong giao thức, và các thuật ngữ cơ
bản
Giao thức FTP được mô tả một cách đơn giản thông qua mô hình hoạt động của
FTP. Mô hình này chỉ ra các nguyên tắc mà một thiết bị phải tuân theo khi tham gia
vào quá trình trao đổi file, cũng như về hai kênh thông tin cần phải thiết lập giữa các
thiết bị đó. Nó cũng mô tả các thành phần của FTP được dùng để quản lý các kênh này
ở cả hai phía - truyền và nhận. Do đó, mô hình này tạo cho ta một khởi điểm lý tưởng
để xem xét hoạt động của FTP ở mức khái quát.
Tiến trình Server-FTP và User-FTP
FTP là một giao thức dạng client/server truyền thống, tuy nhiên thuật ngữ client
thông thường được thay thế bằng thuật ngữ user - người dùng - do thực tế là người sử
dụng mới là đối tượng trực tiếp thao tác các lệnh FTP trên máy clients. Bộ phần mềm
FTP được cài đặt trên một thiết bị được gọi là một tiến trình. Phần mềm FTP được cài
đặt trên máy Server được gọi là tiến trình Server-FTP, và phần trên máy client được
gọi là tiến trình User-FTP.
Kênh điều khiển và kênh dữ liệu trong FTP
Một khái niệm cốt yếu mà ta cần phải nắm về FTP là: mặc dù giao thức này sử
dụng kết nối TCP, nhưng nó không chỉ dùng một kênh TCP như phần lớn các giao
thức truyền thông khác. Mô hình FTP chia quá trình truyền thông giữa bộ phận Server
với bộ phận client ra làm hai kênh logic:
- Kênh điều khiển: đây là kênh logic TCP được dùng để khởi tạo một phiên kết nối
FTP. Nó được duy trì xuyên suốt phiên kết nối FTP và được sử dụng chỉ để truyền các
thông tin điều khiển, như các lệnh và các hồi đáp trong FTP. Nó không được dùng để

truyền file
- Kênh dữ liệu: Mỗi khi dữ liệu được truyền từ server tới client, một kênh kết nối TCP
nhất định lại được khởi tạo giữa chúng. Dữ liệu được truyền đi qua kênh kết nối này -
do đó nó được gọi là kênh dữ liệu. Khi file được truyền xong, kênh này được ngắt.
Việc sử dụng các kênh riêng lẻ như vậy tạo ra sự linh hoạt trong việc truyền truyền dữ
liệu - mà ta sẽ thấy trong các phần tiếp theo. Tuy nhiên, nó cũng tạo cho FTP độ phức
tạp nhất định.
Các tiến trình và thuật ngữ trong FTP
Do các chức năng điều khiển và dữ liệu sử dụng các kênh khác nhau, nên mô
hình hoạt động của FTP cũng chia phần mềm trên mỗi thiết bị ra làm hai thành phần

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×