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

GIÁO TRÌNH LẬP TRÌNH MẠNG

180 215 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 180
Dung lượng 1,96 MB

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

Nội dung

KHOA CÔNG NGH THÔNG TIN Ệ... Sử dụng Soket Ti me- out... Trường ti p theo trong TCP Header sau port là s sequence vàế ốacknowledgement... Port Mô Tả... Igmp Internet Group Management Pro

Trang 1

KHOA CÔNG NGH THÔNG TIN Ệ

Trang 2

M C L C Ụ Ụ

ICH ƯƠ NG I: NH NG KI N TH C C B N V L P TRÌNH M NG Ữ Ế Ứ Ơ Ả Ề Ậ Ạ 6

IIT Ổ NG QUAN 6

IIIT ng Ethernet ầ 6

IV a ch  Ethernet Đị ỉ 8

VEthernet Protocol Type 9

VIData payload  10

VIIChecksum  10

VIIIT Ầ NG IP 10

IXTr ườ ng  a ch đị ỉ 12

X Các c  phân  o n ờ đ ạ 12

XITr ườ ng Type of Service  13

XIITr ườ ng Protocol 13

XIIIT Ầ NG TCP 14

XIV TCP port 15

XVC  ch   ơ ế đả m b o  ả độ  tin c y truy n t i các gói tin  ậ ề ả 16

XVIQuá trình thành l p m t phiên làm vi c TCP ậ ộ ệ 17

XVIIT Ầ NG UDP 19

XVIIICH ƯƠ NG II: L P TRÌNH SOCKET H Ậ ƯỚ NG K T N I Ế Ố 22

XIXS OCKET 22

XXIPA DDRESS .25

XXIIPE ND P OINT .26

XXIIL Ậ P TRÌNH S OCKET H ƯỚ NG K T Ế N I Ố 26

XXIIIL p trình phía Server  ậ 27

XXIVL p trình phía Client ậ 31

XXVV n  ấ đề  v i b   ớ ộ đệ m d  li u  ữ ệ 34

XXVIX  lý v i các b   ử ớ ộ đệ m có kích th ướ c nh ỏ 34

XXVIIV n  ấ đề  v i các thông  i p TCP ớ đ ệ 36

XXVIIIGi i quy t các v n  ả ế ấ đề  v i thông  i p TCP ớ đ ệ 41

XXVIII.1.1.1.S  d ng các thông  i p v i kích th ử ụ đ ệ ớ ướ c c   nh ố đị 41

XXVIII.1.1.2.G i kèm kích th ở ướ c thông  i p cùng v i thông  i p  đ ệ ớ đ ệ 46

XXVIII.1.1.3.S  d ng các h  th ng  ánh d u  ử ụ ệ ố đ ấ để  phân bi t các thông  i p  ệ đ ệ 52

XXIXS  d ng C# Stream v i TCP  ử ụ ớ 52

XXIX.1.1.1.L p NetworkStream ớ 53

XXIX.1.1.2.L p StreamReader và StreamWriter ớ 56

XXXCH ƯƠ NG III: L P TRÌNH SOCKET PHI K T N I Ậ Ế Ố 62

XXXIT Ổ NG QUAN 62

Trang 3

XXXIIL Ậ P TRÌNH PHÍA S ERVER .63

XXXIIIL Ậ P TRÌNH PHÍA C LIENT 65

XXXI VSử dụng phương t hức Connect ( ) t r ong chương t r ì nh UDP Cl i ent 67

XXXVPhân bi ệt các t hông đi ệp UDP .68

XXXVIN GĂN C N Ả M T Ấ DỮ LI U Ệ .70

XXXVIIN GĂN C N Ả M T Ấ GÓI TIN 74

XXXVI I 1 1 Sử dụng Soket Ti me- out 74

XXXVIIIĐ I U Ề KHI N Ể VI C Ệ TRUY N Ề L I Ạ CÁC GÓI TIN .77

XXXIXCH ƯƠ NG IV: S D NG CÁC L P HELPER C A C# SOCKET Ử Ụ Ớ Ủ 82

XLL Ớ P TCP C LIENT 82

XLIL Ớ P TCPL ISTENER 85

XLIIL Ớ P U DP C LIENT 88

XLIIICH ƯƠ NG V: ĐA NHI M TI U TRÌNH Ệ Ể 92

XLIVK HÁI NI M Ệ TI N Ế TRÌNH VÀ TI U Ể TRÌNH C A Ủ W INDOWS 92

XLVM Ô HÌNH 92

XLVIC ÁC KỸ THU T Ậ TRONG NET T O Ạ TI U Ể TRÌNH .93

XLVI I Tạo t i ểu t r ì nh t r ong Thr ead- pool 93

XLVI I I Tạo t i ểu t r ì nh bất đồng bộ 96

XLVI I I 1 1 1 Phương thức BlockingExample 99

XLVI I I 1 1 2 Phương thức Pol l i ngExample 100

XLVI I I 1 1 3 Phương thức Wait ingExample 101

XLVI I I 1 1 4 Phương thức WaitAl lExample .102

XLVI I I 1 1 5 Phương thức Cal lbackExample 104

XLIXThực th i phương thức bằng Timer 105

LThực thi phương thức bằng t iểu tr ình mới 108

LIĐ iều khiển quá tr ình thực th i của một t iểu tr ình 110

LI INhận biết khi nào một t iểu tr ình kết thúc 114

LI I I Khởi chạy một t iến tr ình mới .115

LIVKết thúc một t iến tr ình 117

LVT H C Ự THI PH ƯƠ NG TH C Ứ B NG Ằ CÁCH RA HI U Ệ Đ I Ố T ƯỢ NG W AIT H ANDLE .119

LVICH ƯƠ NG VI: Đ NG B HÓA Ồ Ộ 120

LVIIL Ý DO Đ NG Ồ BỘ HÓA 120

LVIIIC ÁC PH ƯƠ NG PHÁP Đ NG Ồ BỘ HÓA 120

LIXP H ƯƠ NG PHÁP S EMAPHORE 120

LXP H ƯƠ NG PHÁP DÙNG L P Ớ M ONITOR 122

LXIS YSTEM T HREADING W AIT H ANDLE , BAO G M Ồ A UTO R ESET E VENT , M ANUAL R ESET E VENT 124

LXIIP H ƯƠ NG PHÁP M UTEX 127

LXIIICH ƯƠ NG VII: L P TRÌNH SOCKET B T Đ NG B Ậ Ấ Ồ Ộ 129

Trang 4

LXIVL Ậ P TRÌNH SỰ KI N Ệ TRONG W INDOWS 129

LXVSử dụng Event và Del egat e .130

LXVI Lớp AsyncCal l back t r ong l ập t r ì nh Wi ndows .132

LXVIISỬ D NG Ụ S OCKET B T Ấ Đ NG Ồ BỘ 132

LXVI I I Thành l ập kết nối .133

LXVI I I 1 1 1 Phương thức BeginAccept() và EndAccept() 133

LXVI I I 1 1 2 Phương thức BeginConnect() và EndConnect() 135

LXIXGởi dữ l i ệu .136

LXIX.1.1 1 Phương thức BeginSend() và phương thức EndSend() 136

LXIX.1.1 2 Phương thức BeginSendTo() và EndSendTo() 137

LXXNhận dữ l i ệu .138

LXX.1.1.1.Phương thức BeginReceive() , EndReceive, BeginReceiveFrom(), EndReceiveFrom() 138

LXXIChương tr ình WinForm gởi và nhận dữ l i ệu giữa Cl ient và Server 138 LXXI.1 1 1 Chương tr ình Server 138

LXXI.1 1 2 Mô hình chương tr ình Server 139

LXXI.1 1 3 Lớp ServerProgram 139

LXXI.1 1 4 Lớp ServerForm 143

LXXI IChương tr ình Cl ient 144

LXXI I 1 1 1 Mô hình chương tr ình Cl ient 144

LXXI I 1 1 2 Lớp ClientProgram 145

LXXI I 1 1 3 Lớp ClientForm 148

LXXIIIL Ậ P TRÌNH S OCKET B T Ấ Đ NG Ồ BỘ SỬ D NG Ụ TI U Ể TRÌNH 149

LXXIVLập tr ình sử dụng hàng đợi gởi và hàng đợi nhận thông điệp 149

LXXVLập tr ình ứng dụng nhiều Cl ient .155

LXXVICH ƯƠ NG VIII: L P TRÌNH V I CÁC GIAO TH C Ậ Ớ Ứ 158

LXXVIIL P TRÌNH V I GIAO TH C ICMP Ậ Ớ Ứ 158

LXXVII IG iao thức ICMP 158

LXXVII I 1 1 1 Định dạng của gói t in ICMP 158

LXXVII I 1 1 2 Các tường Type của gói t in ICMP 159

LXXVII I 1 1 3 Echo Request and Echo Reply Packets 159

LXXVII I 1 1 4 Gói t in Destinat ion Unreachable .160

LXXVII I 1 1 5 Gói t in Time Exceeded .161

LXXIXSử dụng Raw Socket 161

LXXIX.1.1 1 Định dạng của Raw Socket 161

LXXIX.1.1 2 Gởi các gói t in Raw 162

LXXIX.1.1 3 Nhận các gói t in Raw .162

LXXXTạo ra một lớp ICMP .163

LXXXITạo gói t in ICMP .164

LXXXIITạo phương thức Checksum .164

LXXXII I Lớp ICMP hoàn chỉnh 165

LXXXIVChương tr ình ping đơn giản 167

LXXXVChương tr ình TraceRoute đơn giản 169

LXXXVIL P TRÌNH V I GIAO TH C SMTP Ậ Ớ Ứ 171

LXXXVIICơ bản về Email 171

LXXXVII 1 1 1 Hoạt động của MTA 171

LXXXVII 1 1 2 Gở i mail ra ngoài 172

LXXXVII 1 1 3 Nhận mail 172

Trang 5

LXXXVII.1.1.4.Hoạt động của MDA 173

LXXXVII.1.1.5.Hoạt động của MUA 174

LXXXVI I I SMTP và Wi ndows .176

LXXXVIII 1.1.1.Collaboration Data Objects (CDO) 176

LXXXVIII 1.1.2.Dịch vụ mail SMTP 177

LXXXIXLớp SmtpMail 178

XCCác phương thức và thuộc t ính của lớp SmtpMail 178

XC.1.1.1.Sử dụng lớp SmtpMail 180

Trang 6

gi a các thi t b , đ c bi t là thông qua m ng Internet.ữ ế ị ặ ệ ạ

Đ hi u rõ các khái ni m bên dể ể ệ ướ ậi l p trình m ng, chúng ta ph i hi u rõ giaoạ ả ể

th c IP, hi u cách nó chuy n d li u gi a các thi t b m ng L p trình m ng dùngứ ể ể ữ ệ ữ ế ị ạ ậ ạgiao th c IP thứ ường r t ph c t p Có nhi u y u t c n quan tâm liên quan đ n cáchấ ứ ạ ề ế ố ầ ế

d li u đữ ệ ược g i qua m ng: s lở ạ ố ượng Client và Server, ki u m ng, t c ngh n m ng,ể ạ ắ ẽ ạ

l i m ng,… B i vì các y u t này nh hỗ ạ ở ế ố ả ưởng đ n vi c truy n d li u t thi t b nàyế ệ ề ữ ệ ừ ế ị

đ n thi t b khác trên m ng do đó vi c hi u rõ chúng là v n đ r t quan tr ng đ l pế ế ị ạ ệ ể ấ ề ấ ọ ể ậ trình m ng đạ ược thành công

M t gói d li u m ng g m nhi u t ng thông tin M i t ng thông tin ch a m tộ ữ ệ ạ ồ ề ầ ỗ ầ ứ ộ dãy các byte được s p đ t theo m t tr t t đã đắ ặ ộ ậ ự ược đ nh s n H u h t các gói dị ẵ ầ ế ữ

li u dùng trong l p trình m ng đ u ch a ba t ng thông tin cùng v i d li u đệ ậ ạ ề ứ ầ ớ ữ ệ ượ cdùng đ truy n t i gi a các thi t b m ng Hình sau mô t h th ng th b c c a m tể ề ả ữ ế ị ạ ả ệ ố ứ ậ ủ ộ gói IP:

Hình I.1: Các t ng giao th c m ng trong các gói d li uầ ứ ạ ữ ệ

Trang 7

Ethernet phiên b n 2 tuy không ph i là giao th c chu n nh ng nó đả ả ứ ẩ ư ượ ử ục s d ng r ngộ rãi trong m ng Ethernet H u h t các thi t b m ng k c h đi u hành Windowsạ ầ ế ế ị ạ ể ả ệ ề

m c đ nh dùng giao th c Ethernet phiên b n 2 đ truy n t i các gói IP.ặ ị ứ ả ể ề ả

Ph n đ u c a Ethernet phiên b n 2 là đ a ch MAC (Media Access Card) dùngầ ầ ủ ả ị ỉ

đ xác đ nh các thi t b trên m ng cùng v i s giao th c Ethernet xác đ nh giao th cể ị ế ị ạ ớ ố ứ ị ứ

t ng ti p theo ch a trong gói Ethernet M i gói Ethernet bao g m:ầ ế ứ ỗ ồ

Trang 8

Đ a ch Ethernet (đ a ch MAC) là đ a ch c a các thi t b , đ a ch này đị ỉ ị ỉ ị ỉ ủ ế ị ị ỉ ược gán

b i các nhà s n xu t thi t b m ng và nó không thay đ i đở ả ấ ế ị ạ ổ ược M i thi t b trênỗ ế ị

m ng Ethernet ph i có 1 đ a ch MAC duy nh t Đ a ch MAC g m 2 ph n:ạ ả ị ỉ ấ ị ỉ ồ ầ

• 3 byte xác đ nh nhà s n xu tị ả ấ

• 3 byte xác đ nh s serial duy nh t c a nhà s n xu tị ố ấ ủ ả ấ

Gi n đ đ a ch Ethernet cho phép các đ a ch broadcast và multicast Đ i v iả ồ ị ỉ ị ỉ ố ớ

đ a ch broadcast thì t t c các bit c a đ a ch đích đị ỉ ấ ả ủ ị ỉ ược gán b ng 1ằ

(FFFFFFFFFFFF) M i thi t b m ng s ch p nh n các gói có đ a ch broadcast Đ aỗ ế ị ạ ẽ ấ ậ ị ỉ ị

ch này h u ích cho các giao th c ph i g i các gói truy v n đ n t t c các thi t bỉ ữ ứ ả ở ấ ế ấ ả ế ị

Trang 9

09-00-2B-03-xx-xx DEC default filtering by bridges

09-00-2B-04-00-00 DEC Local Area System Transport (LAST)09-00-2B-23-00-00 DEC Argonaut Console

09-00-77-00-00-01 Retix spanning tree bridges

VEthernet Protocol Type

M t ph n khác r t quan tr ng c a Ethernet Header là trộ ầ ấ ọ ủ ường Protocol Type,

trường này có kích thước hai byte S khác nhau gi a gói tin Ethernet phiên b n 2 vàự ữ ảEthernet 802.2 và 802.3 x y ra trả ở ường này Các gói tin Ethernet 802.2 và 802.3 sử

d ng trụ ường này đ cho bi t kích thể ế ướ ủc c a m t gói tin Ethernet Ethernet phiên b nộ ả

2 dùng trường này đ đ nh nghĩa giao th c t ng k ti p trong gói tin Ethernet M t sể ị ứ ầ ế ế ộ ố giá tr c a trị ủ ường này:

Trang 10

Data payload ph i ch a t i thi u 46 byte đ đ m b o gói Ethernet có chi u dàiả ứ ố ể ể ả ả ề

t i thi u 64 byte N u ph n data ch a đ 46 byte thì các ký t đ m đố ể ế ầ ư ủ ự ệ ược thêm vàocho đ Kích thủ ướ ủc c a trường này t 46 đ n 1500 byte.ừ ế

VIIChecksum

Giá tr checksum cung c p c ch ki m tra l i cho d li u, kích thị ấ ơ ế ể ỗ ữ ệ ướ ủ c c a

trường này là 4 byte N u gói tin b h ng trong lúc truy n, giá tr checksum s b tínhế ị ỏ ề ị ẽ ịtoán sai và gói tin đó được đánh d u là gói tin x u.ấ ấ

VIIIT ng IP ầ

T ng IP đ nh nghĩa thêm nhi u trẩ ị ề ường thông tin c a c a giao th c Ethernetủ ủ ứ

Trang 11

Hình I.3: Thông tin t ng IPầ

Các trường trong t ng IP:ầ

Version 4 Phiên b n IP header (phiên b n hi n t i là 4)ả ả ệ ạ

Header Length 4 Chi u dài ph n header c a gói IPề ầ ủ

Type of Service 8 Ki u ể ch t lấ ượng d ch vị ụ QoS (Quality of Service)

Total Length 16 Chi u dài c a gói IPề ủ

Identification 16 Giá tr ID duy nh t xác đ nh các gói IPị ấ ị

Flags 3 Cho bi t gói IP có b phân đo n hay không hay còn cácế ị ạ

phân đo n khácạFragment offset 13 V trí c a phân đo n trong gói IPị ủ ạ

Time to Live (TTL) 8 Th i gian t i đa gói tin đờ ố ược phép l i trên m ng (đở ạ ạ ượ c

tính b ng giây)ằProtocol 8 Ki u giao th c c a t ng d li u k ti pể ứ ủ ầ ữ ệ ế ế

Header Checksum 16 Checksum c a d li u gói IP ủ ữ ệ header

Source Address 32 Đ a ch IP c a thi t b g iị ỉ ủ ế ị ở

Destination

Address 32 Đ a ch IP c a thi t b nh nị ỉ ủ ế ị ậ

Trang 12

Tr ườ ng Bit Mô Tả

Options Đ nh nghĩa các đ c đi m c a gói IP trong tị ặ ể ủ ươnglai

IXTr ườ ng đ a ch ị ỉ

Đ a ch Ethernet dùng đ xác đ nh các thi t b trên m ng LAN nh ng nó khôngị ỉ ể ị ế ị ạ ư

th dùng đ xác đ nh đ a ch c a các thi t b trên m ng xa Đ xác đ nh các thi t bể ể ị ị ỉ ủ ế ị ạ ở ể ị ế ị trên các m ng khác nhau, đ a ch IP đạ ị ỉ ược dùng M t đ a ch IP là m t s 32 bit và đ aộ ị ỉ ộ ố ị

ch IP đỉ ược chia thành 4 l p sau:ớ

M t trong nh ng ph c t p, r c r i c a gói IP là kích thộ ữ ứ ạ ắ ố ủ ướ ủc c a chúng Kích

thướ ốc t i đa c a gói IP có th lên đ n 65,536 byte Đây là m t lủ ể ế ộ ượng r t l n d li uấ ớ ữ ệ cho m t gói tin Th c t h u h t các truy n t i d li u c p th p nh Ethernetộ ự ế ầ ế ề ả ữ ệ ở ấ ấ ưkhông th h tr m t gói IP l n (ph n d li u c a Ethernet ch có th t i đa 1500ể ỗ ợ ộ ớ ầ ữ ệ ủ ỉ ể ốbyte) Đ gi i quy t v n đ này, các gói IP dùng fragmentation (phân đo n) đ chiaể ả ế ấ ề ạ ểcác gói IP thành các ph n nh h n đ truy n t i t i đích Khi các m nh đầ ỏ ơ ể ề ả ớ ả ược truy nề

t i t i đích, ph n m m c a thi t b nh n ph i có cách đ nh n ra các phân đo n c aả ớ ầ ề ủ ế ị ậ ả ể ậ ạ ủ gói tin và ráp chúng l i thành thành 1 gói IP.ạ

S phân đo n đự ạ ược thành l p nh vào vi c s d ng 3 trậ ờ ệ ử ụ ường c a gói IP:ủfragmentation flags, fragment offset, và trường identification C phân đo n bao g mờ ạ ồ

ba c m t bit sau:ờ ộ

• C reserved: giá tr zeroờ ị

• C Don’t Fragment: cho bi t gói IP không b phân đo nờ ế ị ạ

• C More Fragment: cho bi t gói tin b phân đo n và còn các phân đo n khácờ ế ị ạ ạ

n aữ

Trường IP Indentification xác đ nh duy nh t đ nh danh m i gói IP T t c cácị ấ ị ỗ ấ ảphân đo n c a b t kỳ gói IP nào cũng đ u có cùng s indentification S identificationạ ủ ấ ề ố ố

Trang 13

giúp cho ph n m m máy nh n bi t đầ ề ậ ế ược các phân đo n nào thu c gói IP nào và rápạ ộ

l i cho đúng ạ

Trường fragment offset cho bi t v trí c a phân đo n trong gói tin ban đ u.ế ị ủ ạ ầ

XITr ườ ng Type of Service

Trường Type of Service xác đ nh ki u ch t lị ể ấ ượng d ch v QoS (ị ụ Quality of Service) cho gói IP Trường này được dùng đ đánh d u m t gói IP có m t đ uể ấ ộ ộ ộ ư tiên nào đó ch ng h n nh đẳ ạ ư ược dùng đ tăng đ u tiên c a các d li u c n th iể ộ ư ủ ữ ệ ầ ờ gian th c nh Video, Audio ự ư

Trong h u h t các truy n t i m ng, trầ ế ề ả ạ ường này được được thi t l p giá trế ậ ị zero, cho bi t đây là d li u bình thế ữ ệ ường, tuy nhiên v i các ng d ng c n th i gianớ ứ ụ ầ ờ

th c nh Video hay Audio thì trự ư ường này s đẽ ượ ử ục s d ng đ tăng đ u tiên cho góiể ộ ư

d li u Trữ ệ ường này g m tám bit và ý nghĩa các bit nh sau:ồ ư

• 3 bit được dùng làm trường u tiênư

• 1 bit cho bi t th i gian tr là bình thế ờ ễ ường hay th pấ

• 1 bit cho bi t thông lế ượng bình thường hay cao

• 1 bit cho bi t đ tin c y bình thế ộ ậ ường hay cao

• 2 bit được dùng trong tương lai

XIITr ườ ng Protocol

Được dùng đ xác đ nh giao th c t ng ti p theo trong gói IP, IANA đ nh nghĩaể ị ứ ầ ế ị

135 giá tr cho trị ường này có th dùng trong gói IP nh ng ch có m t s giá tr hayể ư ỉ ộ ố ị

được dùng trong b ng sau:ả

Hai giao th c đứ ược dùng nhi u nh t trong l p trình m ng là TCP và UDPề ấ ậ ạ

Trang 14

Các nhà l p trình m ng ph i hi u cách ho t đ ng c b n c a TCP và đ c bi tậ ạ ả ể ạ ộ ơ ả ủ ặ ệ

là ph i hi u cách TCP truy n t i d li u gi các thi t b m ng Hình sau cho th yả ể ề ả ữ ệ ữ ế ị ạ ấ

nh ng trữ ường c a TCP Header Nh ng trủ ữ ường này ch a các thông tin c n thi t choứ ầ ế

vi c th c thi k t n i và truy n t i d li u m t cách tin tệ ự ế ố ề ả ữ ệ ộ ưởng

Hình I.4: Các trường c a TCP Headerủ

M i trỗ ường c a TCP Header k t h p v i m t ch c năng đ c bi t c a m tủ ế ợ ớ ộ ứ ặ ệ ủ ộ phiên làm vi c TCP Có m t s ch c năng quan tr ng sau:ệ ộ ố ứ ọ

• Source port và Destination port: theo dõi các k t n i gi a các thi t b ế ố ữ ế ị

Trang 15

• Sequence và Acknowledgement number: theo dõi th t các gói tin và truy nứ ự ề

• Đ a ch IP c a thi t b xaị ỉ ủ ế ị ở

• TCP port được gán cho thi t b xaế ị ở

Đ k t n i TCP để ế ố ược thành l p, thi t b xa ph i ch p nh n các gói tinậ ế ị ở ả ấ ậ

truy n đ n port đã đề ế ược gán B i vì có nhi u ng d ng ch y trên m t thi t b sở ề ứ ụ ạ ộ ế ị ử

d ng TCP do đó thi t b ph i c p phát các c ng khác nhau cho các ng d ng khácụ ế ị ả ấ ổ ứ ụnhau

Hình I.5: K t n i TCP đ n gi nế ố ơ ả

Trong hình trên thì thi t b A đang ch y hai ng d ng Server, hai ng d ng nàyế ị ạ ứ ụ ứ ụđang ch các gói tin t Client M t ng d ng đờ ừ ộ ứ ụ ược gán port 8000 và m t ng d ngộ ứ ụ

được gán port 9000 Thi t b m ng B mu n k t n i đ n thi t b m ng A thì nó ph iế ị ạ ố ế ố ế ế ị ạ ả

được gán m t TCP port còn tr ng t h đi u hành và port này s độ ố ừ ệ ề ẽ ược m trong su tở ố phiên làm vi c Các port Client thệ ở ường không quan tr ng và có th gán b t kỳ m tọ ể ấ ộ port nào h p l trên thi t b ợ ệ ế ị

Trang 16

T h p c a m t đ a ch IP và m t port là m t IP endpoint M t phiên làm vi cổ ợ ủ ộ ị ỉ ộ ộ ộ ệ TCP được đ nh nghĩa là m t s k t h p c a m t IP endpoint c c b và m t IPị ộ ự ế ợ ủ ộ ụ ộ ộ

endpoint xa M t ng d ng m ng có th s d ng cùng m t IP endpoint c c bở ộ ứ ụ ạ ể ử ụ ộ ụ ộ

nh ng m i thi t b xa ph i s d ng m t đ a ch IP hay port riêng.ư ỗ ế ị ở ả ử ụ ộ ị ỉ

IANA đ nh nghĩa m t danh sách các port TCP tiêu chu n đị ộ ẩ ược gán cho các ngứ

(LDAP)

Các port t 0->1023 đừ ược gán cho các ng d ng thông d ng do đó v i các ngứ ụ ụ ớ ứ

d ng mà các l p trình viên t o ra thì các port đụ ậ ạ ược gán ph i t 1024->65535.ả ừ

XVC ch đ m b o đ tin c y ơ ế ả ả ộ ậ truy n t i các gói tin ề ả

Trang 17

Trường ti p theo trong TCP Header sau port là s sequence vàế ố

acknowledgement Nh ng giá tr này cho phép TCP theo dõi các gói tin và đ m b o nóữ ị ả ả

được nh n theo đúng th t N u b t kỳ gói tin nào b l i, TCP s yêu c u truy n t iậ ứ ự ế ấ ị ỗ ẽ ầ ề ả

l i các gói tin b l i và ráp chúng l i trạ ị ỗ ạ ước khi g i gói tin cho ng d ng.ở ứ ụ

M i gói tin có m t s duy nh t sequence cho m t phiên làm vi c TCP M t sỗ ộ ố ấ ộ ệ ộ ố

ng u nhiên đẫ ược ch n cho gói tin đ u tiên đọ ầ ược g i đi trong phiên làm vi c M i góiở ệ ỗtin ti p theo đế ược g i s tăng s sequence b ng s byte d li u TCP trong gói tinở ẽ ố ằ ố ữ ệ

trước đó Đi u này đ m b o m i gói tin đề ả ả ỗ ược xác đ nh duy nh t trong lu ng d li uị ấ ồ ữ ệ TCP

Thi t b nh n s d ng trế ị ậ ử ụ ường acknowledgement đ h i báo s sequence cu iể ồ ố ố cùng được nh n t thi t b g i Thi t b nh n có th nh n nhi u gói tin trậ ừ ế ị ở ế ị ậ ể ậ ề ước khi g iở

l i m t h i báo S acknowledgement đạ ộ ồ ố ược tr v là s sequence cao nh t li n sauả ề ố ấ ề

c a d li u đủ ữ ệ ược nh n K thu t này đậ ỹ ậ ược g i là c a s trọ ử ổ ượt Các gói tin đượ c

nh n ngoài th t có th đậ ứ ự ể ược gi trong b đ m và đữ ộ ệ ược đ t vào đúng th t khi cácặ ứ ựgói tin khác đã được nh n thành công N u m t gói tin b m t, thi t b nh n s th yậ ế ộ ị ấ ế ị ậ ẽ ấ

đượ ốc s sequence b l i và g i m t s acknowledgement th p h n đ yêu c u các góiị ỗ ở ộ ố ấ ơ ể ầtin b l i N u không có c a s trị ỗ ế ử ổ ượt m i gói tin s ph i h i báo l i, làm tăng băngỗ ẽ ả ồ ạthông và đ tr m ng.ộ ễ ạ

1-bit ACK flag H i báo nh n m t gói tin ồ ậ ộ

1-bit PUSH flag Cho bi t d li u đế ữ ệ ược đ y vào ng d ng ngay l p t c ẩ ứ ụ ậ ứ1-bit RESET flag Thi t l p l i tình tr ng kh i đ u k t n i TCPế ậ ạ ạ ở ầ ế ố

1-bit SYN flag B t đ u m t phiên làm vi c ắ ầ ộ ệ

1-bit FIN flag K t thúc m t phiên làm vi c ế ộ ệ

Trang 18

TCP s d ng các tình tr ng k t n i đ quy t đ nh tình tr ng k t n i gi a cácử ụ ạ ế ố ể ế ị ạ ế ố ữthi t b M t giao th c b t tay đ c bi t đế ị ộ ứ ắ ặ ệ ược dùng đ thành l p nh ng k t n i này vàể ậ ữ ế ốtheo dõi tình tr ng k t n i trong su t phiên làm vi c ạ ế ố ố ệ M t phiên làm vi c TCP g mộ ệ ồ

ba pha sau:

• M b t tayở ắ

• Duy trì phiên làm vi c ệ

• Đóng b t tayắ

M i pha yêu c u các bit c đỗ ầ ờ ược thi t l p trong m t th t nào đó Quá trìnhế ậ ộ ứ ự

m b t tay thở ắ ường được g i là ba cái b t tay và nó yêu c u ba bọ ắ ầ ước đ thành l p k tể ậ ế

n i.ố

• Thi t b g i g i c SYN cho bi t b t đ u phiên làm vi c ế ị ở ở ờ ế ắ ầ ệ

• Thi t b nh n g i c c SYN và c ACK trong cùng m t gói tin cho bi t nóế ị ậ ở ả ờ ờ ộ ế

• Thi t b kh i đ u đóng k t n i g i c FINế ị ở ầ ế ố ở ờ

• Thi t b bên kia g i c FIN và ACK trong cùng m t gói tin cho bi t nó ch pế ị ở ờ ộ ế ấ

nh n đóng k t n iậ ế ố

• Thi t b kh i đ u đóng k t n i g i c ACK đ đóng k t n i ế ị ở ầ ế ố ở ờ ể ế ố

Trang 19

Hình I.6: Các bước b t tay c a giao th c TCPắ ủ ứ

XVIIT ng UDP ầ

User Datagram Protocol (UDP) là m t giao th c ph bi n khác độ ứ ổ ế ược dùngtrong vi c truy n t i d li u c a các gói IP Không gi ng nh TCP, UDP là giao th cệ ề ả ữ ệ ủ ố ư ứ phi n i k t M i phiên làm vi c UDP không gì khác h n là truy n t i m t gói tin theoố ế ỗ ệ ơ ề ả ộ

m t hộ ướng Hình sau s mô t c u trúc c a m t gói tin UDPẽ ả ấ ủ ộ

Trang 20

Hình I.7: UDP Header

UDP header g m nh ng trồ ữ ường sau:

• Source Port

• Destination Port

• Message Length

• Checksum

• Next Level Protocol

Cũng gi ng nh TCP, UDP theo dõi các k t n i b ng cách s d ng các port tố ư ế ố ằ ử ụ ừ 1024->65536, các port UDP t 0->1023 là các port dành riêng cho các ng d ng phừ ứ ụ ổ

bi n, m t s dùng ph bi n nh :ế ộ ố ổ ế ư

Trang 21

Port Mô Tả

Trang 22

XVIIICH ƯƠ NG II: L P TRÌNH SOCKET Ậ

H ƯỚ NG K T N I Ế Ố

XIXSocket

Trong l p trình m ng dùng Socket, chúng ta không tr c ti p truy c p vào cácậ ạ ự ế ậthi t b m ng đ g i và nh n d li u Thay vì v y, m t file mô t trung gian đế ị ạ ể ở ậ ữ ệ ậ ộ ả ượ c

t o ra đ đi u khi n vi c l p trình Các file mô t dùng đ tham chi u đ n các k tạ ể ề ể ệ ậ ả ể ế ế ế

n i m ng đố ạ ược g i là các Socket Socket đ nh nghĩa nh ng đ c tr ng sau:ọ ị ữ ặ ư

• M t k t n i m ng hay m t độ ế ố ạ ộ ường ng d n đ truy n t i d li uố ẫ ể ề ả ữ ệ

• M t ki u truy n thông nh stream hay datagramộ ể ề ư

• M t giao th c nh TCP hay UDP ộ ứ ư

Sau khi m t Socket độ ượ ạc t o ra nó ph i đả ược g n vào m t đ a ch m ng vàắ ộ ị ỉ ạ

m t port trên h th ng c c b hay xa M t khi Socket đã độ ệ ố ụ ộ ở ộ ược g n vào các đ a chắ ị ỉ

m ng và port, nó có th đạ ể ược dùng đ g i và nh n d li u trong m ng.ể ở ậ ữ ệ ạ

Trong Net Framework l p Socket h tr cho vi c l p trình Socket Phớ ỗ ợ ệ ậ ươ ng

th c t o l p nh sau: ứ ạ ậ ư

Socket (AddressFamily, SocketType, ProtocolType)

Phương th c t o l p c a l p Socket c n các đ i s truy n vào sau:ứ ạ ậ ủ ớ ầ ố ố ề

+AddressFamily: h đ a ch đọ ị ỉ ược dùng, tham s này có th có các giá tr sau:ố ể ị

AppleTalk Đ a ch AppleTalkị ỉ

Atm Native ATM services address

Banyan Đ a ch Banyan ị ỉ

Ccitt Đ a ch cho giao th c CCITT, nh là X25ị ỉ ứ ư

Chaos Đ a ch cho giao th c MIT CHAOSị ỉ ứ

Cluster Đ a ch cho các s n ph m cluster c a Microsoftị ỉ ả ẩ ủ

DataKit Đ a ch cho giao th c Datakitị ỉ ứ

DataLink Đ a ch c a giao th c t ng data-link ị ỉ ủ ứ ầ

DecNet Đ a ch DECnet ị ỉ

Trang 23

Ecma Đ a ch ECMA (European Computer Manufacturersị ỉ

Association)

FireFox Đ a ch FireFox ị ỉ

HyperChannel Đ a ch NSC Hyperchannel ị ỉ

Ieee12844 Đ a ch workgroup IEEE 1284.4ị ỉ

ImpLink Đ a ch ARPANET IMP ị ỉ

Osi Đ a ch cho giao th c ISO ị ỉ ứ

Pup Đ a ch cho giao th c PUP ị ỉ ứ

Sna Đ a ch IBM SNAị ỉ

Dgram Đượ ử ục s d ng trong các giao th c phi k t n i, không tin tứ ế ố ưởng

Thông đi p có th b m t, b trùng l p ho c có th đ n sai th t ệ ể ị ấ ị ặ ặ ể ế ứ ự

Dgram s d ng giao th c ử ụ ứ UDP và h đ a ch InterNetwork.ọ ị ỉ

Trang 24

Raw Đượ ửc s trong các giao th c c p th p nh Internet Control Messageứ ấ ấ ư

Protocol (Icmp) và Internet Group Management Protocol (Igmp)

ng d ng ph i cung c p IP header khi g i Khi nh n s nh n đ c

IP header và các tùy ch n tọ ương ng.ứ

Rdm Đượ ử ục s d ng trong các giao th c phi k t n i, hứ ế ố ướng thông đi p,ệ

truy n thông đi p tin c y, và biên c a thông đi p đề ệ ậ ủ ệ ược b o v ả ệ Rdm (Reliably Delivered Messages) thông đi p đ n không b trùngệ ế ị

l p và đúng th t H n n a, thi t b nh n đặ ứ ự ơ ữ ế ị ậ ược thi t b n u thôngế ị ế

đi p b m t N u kh i t o ệ ị ấ ế ở ạ Socket dùng Rdm, ta không c n yêu c uầ ầ

k t n i t i host xa trế ố ớ ở ước khi g i và nh n d li u ở ậ ữ ệ

Seqpacket Cung c p hấ ướng k t n i và truy n 2 chi u các dòng byte m t cáchế ố ề ề ộ

tin c y Seqpacket không trùng l p d li u và b o v biên d li u.ậ ậ ữ ệ ả ệ ữ ệ

Socket ki u ể Seqpacket truy n thông v i 1 máy đ n và yêu c u k tề ớ ơ ầ ế

n i trố ước khi truy n d li u.ề ữ ệ

Stream Đượ ử ục s d ng trong các giao th c hứ ướng k t n i, không b trùngế ố ị

l p d li u, không b o v biên d li u ặ ữ ệ ả ệ ữ ệ Socket ki u Stream chể ỉ truy n thông v i m t máy đ n và yêu c u k t n i trề ớ ộ ơ ầ ế ố ước khi truy nề

d li u ữ ệ Stream dùng giao th c Transmission Control Protocol (Tcp)

và h đ a ch ọ ị ỉ InterNetwork Unknown Ch a bi t ki u ư ế ể Socket

+ProtocolType: ki u giao th c, tham s này có th có các giá tr sau:ể ứ ố ể ị

Icmp Internet Control Message Protocol

Igmp Internet Group Management Protocol

IPSecAuthenticationHeader IPv6 Authentication

IPSecEncapsulatingSecurityPayload IPv6 Encapsulating Security Payload

header

IPv6 Internet Protocol version 6 (IPv6)

Trang 25

Ipx Internet Packet Exchange Protocol

protocol

IPAddress là m t đ i tộ ố ượng dùng đ mô t m t đ a ch IP, đ i tể ả ộ ị ỉ ố ượng này có

th để ượ ử ục s d ng trong nhi u phề ương th c c a Socket M t s phứ ủ ộ ố ương th c c aứ ủ

network byte orderIsLoopBack Cho bi t đ a ch IP có ph i là đ a chế ị ỉ ả ị ỉ

LoopBack hay khôngNetworkToHostOrder Chuy n 1 đ a ch IP t ể ị ỉ ừ network byte order

thành host byte orderParse Chuy n 1 chu i thành 1 th hi n IPAddressể ỗ ể ệToString Chuy n 1 đ i tể ố ượng IPAddress thành m tộ

chu iỗ

Trang 26

Phương th c Parse() thứ ường được dùng đ t o ra 1 th hi nể ạ ể ệ c a IPAddress:ủ

IPAddress localIpAddress = IPAddress Parse( "127.0.0.1" );

L p IPAddress cũng cung c p 4 thu c tính đ mô t các đ a ch IP đ c bi t:ớ ấ ộ ể ả ị ỉ ặ ệ

• Any: dùng đ mô t m t đ a ch IP b t kỳ c a h th ng.ể ả ộ ị ỉ ấ ủ ệ ố

• Broadcast: dùng đ mô t đ a ch IP Broadcast cho m ng c c bể ả ị ỉ ạ ụ ộ

• Loopback: dùng đ mô t đ a ch loopback c a h th ng ể ả ị ỉ ủ ệ ố

• None: không dùng đ a ch IPị ỉ

XXIIPEndPoint

IPEndPoint là m t đ i tộ ố ượng mô t s k t h p c a m t đ a ch IP và port Đ iả ự ế ợ ủ ộ ị ỉ ố

tượng IPEndPoint được dùng đ g n k t các Socket v i các đ a ch c c b ho c cácể ắ ế ớ ị ỉ ụ ộ ặ

đ a ch xa ị ỉ ở

Hai thu c tính c a IPEndPoint có th độ ủ ể ược dùng đ l y để ấ ược vùng các porttrên h th ng là MinPort và MaxPortệ ố

XXIIL p trình Socket h ậ ướ ng k t n i ế ố

Trong l p trình Socket hậ ướng k t n iế ố , giao th c TCP đứ ược dùng đ thành l pể ậ phiên làm vi c gi a hai endpoint Khi s d ng giao th c TCP đ thành l p k t n i taệ ữ ử ụ ứ ể ậ ế ố

ph i đàm phán k t n i trả ế ố ước nh ng khi k t n i đã đư ế ố ược thành l p d li u có thậ ữ ệ ể truy n đi gi a các thi t b m t cách tin tề ữ ế ị ộ ưởng

Đ l p trình Socket hể ậ ướng k t n i ta ph i th c hi n m t lo t các thao tácế ố ả ự ệ ộ ạ

gi a clien và ữ Server nh trong mô hình bên dư ưới

Trang 27

Hình II.1: Mô hình l p trình Socket hậ ướng k t n i ế ố

XXIIIL p trình phía Server ậ

Đ u tiên Server s t o m t Socket, Socket này s đầ ẽ ạ ộ ẽ ược g n vào m t đ a ch ipắ ộ ị ỉ

và m t port c c b , hàm đ th c hi n vi c này là hàm Bind() Hàm này c n m t danhộ ụ ộ ể ự ệ ệ ầ ộ

đ i s là m t IPEndPoint c c b : ố ố ộ ụ ộ

IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 5000);

Socket server = new Socket(AddressFamily.InterNetwork,

SocketType.Stream, ProtocolType.Tcp);

server.Bind(ipep);

B i vì ở Server thường ch p nh n k t n i trên chính đ a ch IP và port riêng c aấ ậ ế ố ị ỉ ủ

nó nên ta dùng IPAddress Any đ ch p nh n k t n i trên b t kỳ card m ng nàoể ấ ậ ế ố ấ ạ

Đ a ch IP ta dùng đây là đ a ch IP version 4 và ki u giao th c là TCP nênị ỉ ở ị ỉ ể ứAddressFamily là InterNetwork và SocketType là Stream

Sau khi Socket đã được g n k t vào m t đ a ch và m t port, Server ph i s nắ ế ộ ị ỉ ộ ả ẵ sàng ch p nh n k t n i t Client Vi c này đấ ậ ế ố ừ ệ ược th c hi n nh vào hàmự ệ ờListen().Hàm Listen() có m t đ i s , đó chính là s Client t i đa mà nó l ng nghe.ộ ố ố ố ố ắserver.Listen(10);

Ti p theo ế Server dùng hàm Accept() đ ch p nh n k t n i t Client:ể ấ ậ ế ố ừ

Socket client = server.Accept();

Trang 28

Hàm Accept() này s d ng Server l i và ch cho đ n khi nào có Client k tẽ ừ ạ ờ ế ế

n i đ n nó s tr v m t Socket khác, Socket này đố ế ẽ ả ề ộ ược dùng đ trao đ i d li u v iể ổ ữ ệ ớ Client Khi đã ch p nh n k t n i v i Client thì Server có th g i và nh n d li u v iấ ậ ế ố ớ ể ở ậ ữ ệ ớ Client thông qua phương th c Send() và Receive().ứ

string welcome = "Hello Client" ;

buff = Encoding ASCII.GetBytes(welcome);

client.Send(buff, buff.Length, SocketFlags None);

Phương th c Send() c a Socket dùng đ g i d li u, phứ ủ ể ở ữ ệ ương th c này có m tứ ộ

s đ i s quan tr ng sau:ố ố ố ọ

 Buff : m ng các byte c n g iả ầ ở

 Offset: v trí đ u tiên trong m ng c n g iị ầ ả ầ ở

 Size: s byte c n g iố ầ ở

 SocketFlags: ch ra cách g i d li u trên Socketỉ ở ữ ệ

Vi c g i và nh n d li u đệ ở ậ ữ ệ ược th c hi n liên t c thông qua m t vòng l p vôự ệ ụ ộ ặ

Console WriteLine( Encoding ASCII.GetString(buff, 0, recv));

client.Send(buff, recv, SocketFlags None);

}

Phương th c Receive() đ t d li u vào buffer, kích thứ ặ ữ ệ ước buffer được thi tế

l p l i, do đó n u buffer không đậ ạ ế ược thi t l p l i, l n g i phế ậ ạ ầ ọ ương th c Receive() kứ ế

ti p s ch có th nh n đế ẽ ỉ ể ậ ược d li u t i đa b ng l n nh n d li u trữ ệ ố ằ ầ ậ ữ ệ ước

Phương th c này có ứ m t s đ i s quan tr ng sau:ộ ố ố ố ọ

 Buff : m ng các byte c n g iả ầ ở

 Offset: v trí đ u tiên trong m ng c n nh nị ầ ả ầ ậ

 Size: s byte c n g iố ầ ở

Trang 29

 SocketFlags: ch ra cách nh n d li u trên Socketỉ ậ ữ ệ

Phương th c Receive() tr v s byte d li u nh n đứ ả ề ố ữ ệ ậ ượ ừc t Client N uế không có d li u đữ ệ ược nh n, phậ ương th c Receive() s b d ng l i và ch cho t iứ ẽ ị ừ ạ ờ ớ khi có d li u Khi Client g i tín hi u k t thúc phiên làm vi c (b ng cách g i c FINữ ệ ở ệ ế ệ ằ ở ờtrong gói TCP), phương th c Receive() s tr v giá tr 0 Khi phứ ẽ ả ề ị ương th c Receive()ứ

tr v giá tr 0, ta đóng Socket c a Client l i b ng phả ề ị ủ ạ ằ ương th c Close() Socket chínhứ(Server Socket) v n còn ho t đ ng đ ch p nh n các k t n i khác N u không mu nẫ ạ ộ ể ấ ậ ế ố ế ố Client nào k t n i đ n n a thì ta đóng Server l i luôn:ế ố ế ữ ạ

Console WriteLine( "Dang cho Client ket noi den " );

//Hàm Accept() s block server l i cho đ n khi có Client k t n i đ n ẽ ạ ế ế ố ế Socket client = server.Accept();

//Client EndPoint

IPEndPoint clientep = ( IPEndPoint )client.RemoteEndPoint;

Trang 30

Console WriteLine( "Da ket noi voi Client {0} tai port {1}" ,

clientep.Address, clientep.Port);

string welcome = "Hello Client" ;

//Chuy n chu i thành m ng các byte ể ỗ ả

buff = Encoding ASCII.GetBytes(welcome);

//G i câu chào cho Client ở

client.Send(buff, buff.Length, SocketFlags None);

Trang 31

Hình II.2: K t qu tr v sau khi telnet vào ế ả ả ề Server local t i port 5000ạ

Sau khi dùng l nh telnet, k t qu tr v nh trên hình là đã k t n i thành côngệ ế ả ả ề ư ế ố

XXIVL p trình phía Client ậ

L p trình Socket hậ ướng k t n i phía Client đ n gi n h n phía Server Clientế ố ơ ả ơcũng ph i g n k t m t đ a ch c a m t Socket đã đả ắ ế ộ ị ỉ ủ ộ ược t o ra nh ng s d ngạ ư ử ụ

phương th c Connect() ch không s d ng phứ ứ ử ụ ương th c Bind() gi ng nh phíaứ ố ưServer Phương th c Connect() yêu c u m t IPEndPoint c a Server mà Client c n k tứ ầ ộ ủ ầ ế

Trang 32

}

Phương th c Connect() s d ng l i cho đ n khi ứ ẽ ừ ạ ế Client k t n i đế ố ược v iớ Server N u k t n i không th đế ế ố ể ược th c hi n thì nó s phát sinh ra m t bi t l , doự ệ ẽ ộ ệ ệ

đó hàm Connect() tra ph i đ trong kh i try, catch đ không b l i chả ể ố ể ị ỗ ương trình

Khi k t n i đế ố ược thành l p, Client có th dùng phậ ể ương th c Send() vàứReceive() c a l p Socket đ g i và nh n d li u tủ ớ ể ở ậ ữ ệ ương t nh Server đã làm Khiự ưquá trình trao đ i d li u đã hoàn t t, đ i tổ ữ ệ ấ ố ượng Socket ph i đả ược đóng l i ClientạSocket dùng phương th c Shutdown() đ d ng Socket và dùng phứ ể ừ ương th c Close()ứ

đ th c s đóng phiên làm vi c Phể ự ự ệ ương th c Shutdown() c a Socket dùng m t thamứ ủ ộ

s đ quy t đ nh cách Socket s d ng l i Các phố ể ế ị ẽ ừ ạ ương th c đó là:ứ

SocketShutdown.Both Ngăn c n g i và nh n d li u trên ả ở ậ ữ ệ Socket

SocketShutdown.Receive Ngăn c n nh n d li u trên ả ậ ữ ệ Socket C RST s đờ ẽ ược g iở

n u có thêm d li u đế ữ ệ ược nh n.ậSocketShutdown.Send Ngăn c n g i d li u trên ả ở ữ ệ Socket C FIN s đờ ẽ ược g i sauở

khi t t c d li u còn l i trong buffer đã đấ ả ữ ệ ạ ược g i đi.ở

byte [] buff = new byte [1024];

//Chu i nh p vào và chu i nh n đ ỗ ậ ỗ ậ ượ c

string input, stringData;

Trang 33

//Hàm Connect() s b block l i và ch khi k t n i đ ẽ ị ạ ờ ế ố ượ c v i server thì ớ

input = Console ReadLine();

//N u nh p exit thì thoát và đóng Socket ế ậ

Trang 34

XXVV n đ v i b đ m d li u ấ ề ớ ộ ệ ữ ệ

Trong ví d ụ Client, Server đ n gi n trên thì m t m ng các byte đơ ả ộ ả ược dùng như

là b đ m đ g i và nh n d li u trên Socket B i vì chộ ệ ể ở ậ ữ ệ ở ương trình được ch y trongạmôi trường được đi u khi n, t t c các thông đi p đ u thu c d ng text và kíchề ể ấ ả ệ ề ộ ạ

thước nh nên lo i buffer này không ph i là m t v n đ ỏ ạ ả ộ ấ ề

Trong th gi i th c, chúng ta không bi t kích thế ớ ự ế ước và ki u d li u ể ữ ệ đ n trongếkhi truy n thông gi a Client và Server V n đ x y ra khi khi d li u đ n l n h nề ữ ấ ề ả ữ ệ ế ớ ơ kích thước b đ m d li u ộ ệ ữ ệ

Khi nh n d li u thông qua TCP, d li u đậ ữ ệ ữ ệ ượ ưc l u tr trong b đ m hữ ộ ệ ệ

th ng M i khi g i phố ỗ ọ ương th c Receive(), nó s đ c d li u t b đ m TCP và l yứ ẽ ọ ữ ệ ừ ộ ệ ấ

d li u ra kh i b đ m S lữ ệ ỏ ộ ệ ố ượng d li u đữ ệ ược đ c b i phọ ở ương th cứ Receive()

được đi u khi n b i hai y u t sau: ề ể ở ế ố

• Kích thước b đ m d li u độ ệ ữ ệ ược ch ra trong phỉ ương th c Receive()ứ

• Kích thước b đ m độ ệ ược ch ra trong tham s c a phỉ ố ủ ương th c Receive()ứTrong ví d đ n gi n trên, buffer đụ ơ ả ược đ nh nghĩa là m t m ng byte kíchị ộ ả

thước 1024 B i vì kích thở ước d li u không đữ ệ ược ch ra trong phỉ ương th cứ Receive() nên kích thước b đ m t đ ng l y kích thộ ệ ự ộ ấ ước m c đ nh c a b đ m dặ ị ủ ộ ệ ữ

li u là 1024 byte Phệ ương th c Receive() s đ c 1024 byte d li u m t l n và đ t dứ ẽ ọ ữ ệ ộ ầ ặ ữ

li u đ c đệ ọ ược vào bi n buffế

stringData = Encoding ASCII.GetString(buff, 0, byteReceive);

Trong đ i s c a hàm GetString, ta ph i truy n vào s byte th c s đã đ cố ố ủ ả ề ố ự ự ọ

được n u không ta s nh n đế ẽ ậ ược m t chu i v i các byte th a đ ng sau.ộ ỗ ớ ừ ở ằ

XXVIX lý v i các b đ m có kích th ử ớ ộ ệ ướ c nh ỏ

Trang 35

H đi u hành Window dùng b đ m TCP đ g i và nh n d li u Đi u này làệ ề ộ ệ ể ở ậ ữ ệ ề

c thi t đ TCP có th g i l i d li u b t c lúc nào c n thi t M t khi d li u đãầ ế ể ể ở ạ ữ ệ ấ ứ ầ ế ộ ữ ệ

được h i báo nh n thành công thì nó m i đồ ậ ớ ược xóa kh i b đ m ỏ ộ ệ

Hình II.3: TCP Buffer

D li u đ n cũng đữ ệ ế ược ho t đ ng theo cách tạ ộ ương t Nó s l i trong bự ẽ ở ạ ộ

đ m cho đ n khi phệ ế ương th c Receive() đứ ược dùng đ đ c nó N u phể ọ ế ương th cứ Receive() không đ c toàn b d li u trong b đ m, ph n còn l i v n đọ ộ ữ ệ ở ộ ệ ầ ạ ẫ ược n m ằ ở

đó và ch phờ ương th c Receive() ti p theo đứ ế ược đ c D li u s không b m tọ ữ ệ ẽ ị ấ

nh ng chúng ta s không l y đư ẽ ấ ược các đo n d li u mình mong mu n ạ ữ ệ ố

Đ th y để ấ ược v n đ , ta ti n hành thay đ i kích thấ ề ế ổ ước b đ m t 1024 byteộ ệ ừ

xu ng còn 10 byte Và ch y l i chố ạ ạ ương trình Client, Server đ n gi n trên ơ ả

Trang 36

Hình II.4: K t qu tr v khi ch y chế ả ả ề ạ ương trình v i ớ buffer nhỏ

B i vì b đ m d li u không đ l n đ l y h t d li u b đ m TCP nênở ộ ệ ữ ệ ủ ớ ể ấ ế ữ ệ ở ộ ệ

phương th c ứ Receive() ch có th l y đỉ ể ấ ược m t lộ ượng d li u có đ l n đúng b ngữ ệ ộ ớ ằ

đ l n c a b đ m d li u, ph n còn l i v n n m b đ m TCP và nó độ ớ ủ ộ ệ ữ ệ ầ ạ ẫ ằ ở ộ ệ ượ ấ c l ykhi g i l i phọ ạ ương th c ứ Receive() Do đó câu chào Client c a Server ph i dùng t i haiủ ả ớ

l n g i phầ ọ ương th c ứ Receive() m i l y đớ ấ ược h t Trong l n g i và nh n d li u kế ầ ở ậ ữ ệ ế

ti p, đo n d li u ti p theo đế ạ ữ ệ ế ược đ c t b đ m TCP do đó n u ta g i d li u v iọ ừ ộ ệ ế ở ữ ệ ớ kích thướ ớc l n h n 10 byte thì khi nh n ta ch nh n đơ ậ ỉ ậ ược 10 byte đ u tiên ầ

B i vì v y nên trong khi l p trình m ng chúng ta ph i quan tâm đ n vi c đ cở ậ ậ ạ ả ế ệ ọ

d li u t b đ m ữ ệ ừ ộ ệ TCP m t cách chính xác B đ m quá nh có th d n đ n tìnhộ ộ ệ ỏ ể ẫ ế

tr ng thông đi p nh n s không kh p v i thông đi p g i, ngạ ệ ậ ẽ ớ ớ ệ ở ượ ạ ộ ệc l i b đ m quá l nớ

s làm cho các thông đi p b tr n l i, khó x lý Vi c khó nh t là làm sao phân bi tẽ ệ ị ộ ạ ử ệ ấ ệ

được các thông đi p đệ ược đ c t Socket.ọ ừ

XXVIIV n đ v i các thông đi p TCP ấ ề ớ ệ

M t trong nh ng khó khăn c a nh ng nhà l p trình m ng khi s d ng giaoộ ữ ủ ữ ậ ạ ử ụ

th c TCP đ chuy n d li u là giao th c này không quan tâm đ n biên d li u ứ ể ể ữ ệ ứ ế ữ ệ

Trang 37

Hình II.5: Client Send hai l n r i Server m i Receiveầ ồ ớ

Nh trên hình v n đ x y ra khi truy n d li u là không đ m b o đư ấ ề ả ề ữ ệ ả ả ược m iỗ

phương th c Send() s không đứ ẽ ược đ c b i m t phọ ở ộ ương th c Receive() T t c dứ ấ ả ữ

li u đệ ược đ c t phọ ừ ương th c Receive() không th c s đứ ự ự ược đ c tr c ti p t m ngọ ự ế ừ ạ

mà nó được đ c t b đ m TCP Khi các gói tin TCP đọ ừ ộ ệ ược nh n t m ng s đậ ừ ạ ẽ ượ c

đ t theo th t trong b đ m TCP M i khi phặ ứ ự ộ ệ ỗ ương th c Receive() đứ ược g i, nó sọ ẽ

đ c d li u trong b đ m TCP, không quan tâm đ n biên d li u ọ ữ ệ ộ ệ ế ữ ệ

Chúng ta hãy xem xét ví d sau, Ch ụ ươ ng Trình BadTCPServer:

Trang 38

server.Bind(ipep);

//Server l ng nghe t i đa 10 k t n i ắ ố ế ố

server.Listen(10);

Console WriteLine( "Dang cho Client ket noi den " );

//Hàm Accept() s block server l i cho đ n khi có Client k t n i đ n ẽ ạ ế ế ố ế Socket client = server.Accept();

//Client EndPoint

IPEndPoint clientep = ( IPEndPoint )client.RemoteEndPoint;

Console WriteLine( "Da ket noi voi Client {0} tai port {1}" ,

clientep.Address, clientep.Port);

string welcome = "Hello Client" ;

//Chuy n chu i thành m ng các byte ể ỗ ả

buff = Encoding ASCII.GetBytes(welcome);

//G i câu chào cho Client ở

client.Send(buff, buff.Length, SocketFlags None);

for ( int i = 0; i < 5; i++)

{

byteReceive = client.Receive(data);

Console WriteLine( Encoding ASCII.GetString(data, 0, byteReceive)); }

Trang 39

M i khi đỗ ược g i, phọ ương th c Receive() đ c toàn b d li u trong b đ mứ ọ ộ ữ ệ ộ ệ TCP, sau khi nh n năm thông đi p, k t n i đậ ệ ế ố ược đóng l i ạ

byte [] buff = new byte [10];

//Chu i nh p vào và chu i nh n đ ỗ ậ ỗ ậ ượ c

string input, stringData;

server.Send( Encoding ASCII.GetBytes( "Thong diep 1" ));

server.Send( Encoding ASCII.GetBytes( "Thong diep 2" ));

Trang 40

server.Send( Encoding ASCII.GetBytes( "Thong diep 3" ));

server.Send( Encoding ASCII.GetBytes( "Thong diep 4" ));

server.Send( Encoding ASCII.GetBytes( "Thong diep 5" ));

Console WriteLine( "Dong ket noi voi server " );

K t qu ch ế ả ươ ng trình nh hình bên d ư ướ i

Hình II.6: K t qu trên Serverế ảTrong l n g i phầ ọ ương th c Receive() l n đ u tiên, phứ ầ ầ ương th c này nh n toànứ ậ

b d li u t phộ ữ ệ ừ ương th c Send() c a Client g i lên, trong l n g i phứ ủ ở ầ ọ ương th cứ Receive() l n th hai, phầ ứ ương th c Receive() đ c d li u t hai phứ ọ ữ ệ ừ ương th c Send()ứ

và m t phộ ương th c Send() khác g i d li u ch a xong Trong l n g i th ba thìứ ở ữ ệ ư ầ ọ ứ

phương th c Receive() s đ c h t d li u đang đứ ẽ ọ ế ữ ệ ược g i d t phở ở ừ ương th c Send()ứ

và đ c d li u đọ ữ ệ ược g i t phở ừ ương th c Send() cu i cùng và sau khi Client th c hi nứ ố ự ệ

Ngày đăng: 20/11/2014, 20:56

HÌNH ẢNH LIÊN QUAN

Hình I.2:  Ethernet Header - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh I.2: Ethernet Header (Trang 7)
Hình I.3:  Thông tin t ng IP ầ Các tr ườ ng trong t ng IP:ầ - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh I.3: Thông tin t ng IP ầ Các tr ườ ng trong t ng IP:ầ (Trang 11)
Hình I.5:  K t n i TCP đ n gi n ế ố ơ ả - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh I.5: K t n i TCP đ n gi n ế ố ơ ả (Trang 15)
Hình I.6:  Các b ướ c b t tay c a giao th c TCP ắ ủ ứ - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh I.6: Các b ướ c b t tay c a giao th c TCP ắ ủ ứ (Trang 19)
Hình II.1:  Mô hình l p trình Socket h ậ ướ ng k t n i  ế ố - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh II.1: Mô hình l p trình Socket h ậ ướ ng k t n i ế ố (Trang 27)
Hình II.2:  K t qu  tr  v  sau khi telnet vào  ế ả ả ề Server local t i port 5000 ạ - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh II.2: K t qu tr v sau khi telnet vào ế ả ả ề Server local t i port 5000 ạ (Trang 31)
Hình II.3:  TCP Buffer - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh II.3: TCP Buffer (Trang 35)
Hình II.5:  Client Send hai l n r i Server m i Receive ầ ồ ớ - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh II.5: Client Send hai l n r i Server m i Receive ầ ồ ớ (Trang 37)
Hình V.1:  Mô hình l p trình Socket phi k t n i ậ ế ố - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh V.1: Mô hình l p trình Socket phi k t n i ậ ế ố (Trang 62)
Hình VI.1:  L p trình s  ki n trên Windows ậ ự ệ - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh VI.1: L p trình s ki n trên Windows ậ ự ệ (Trang 129)
Hình VI.2:  G i và nh n s  ki n trong Windows ở ậ ự ệ - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh VI.2: G i và nh n s ki n trong Windows ở ậ ự ệ (Trang 130)
Hình VI.4:  Mô hình ch ươ ng trình Server - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh VI.4: Mô hình ch ươ ng trình Server (Trang 139)
Hình VI.5:  Giao di n Client ệ - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh VI.5: Giao di n Client ệ (Trang 144)
Hình VI.6:  Mô hình ch ươ ng trình Client - GIÁO TRÌNH LẬP TRÌNH MẠNG
nh VI.6: Mô hình ch ươ ng trình Client (Trang 145)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w