Professional Documents
Culture Documents
Lập trình socket với TCP
Lập trình socket với TCP
Lập trình socket với TCP
socket() socket()
bind()
listen()
accept() connect()
recv() send()
send() recv()
close() close()
Quy trình «
Chú ý
Khuôn dҥng thông điӋp yêu cҫu (client) và
thông điӋp trҧ lӡi (server) cҫn phҧi đưӧc
quy đӏnh trưӟc
Ngưӡi lұp trình application protocol phҧi
đӏnh nghĩa các protocol trưӟc khi cài đһt
chúng.
Các namespace cho lұp trình mҥng
System.Net.Sockets;
System.Net;
-> các lӟp hӛ trӧ lұp trình mҥng thuӝc 2
namespace này
-> cҫn using chúng vào project
Dns class
Thuӝc namespace System.Net
Phân giҧi đӏa chӍ tên miӅn -> đӏa chӍ IP
Các phương thӭc quan trӑng:
public static IPHostEntry Resolve(string hostname)
Phân giҧi đӏa chӍ tên miӅn -> IPHostEntry (chӭa mӝt tұp đӏa chӍ IP)
Ví dө:
IPHostEntry iph = Dns.Resolve(www.msdn.microsoft.com);
à iph.HostName = msdn.micosoft.akadns.net
à iph.AddressList = {64.4.11.251}
à iph.Aliases = {msdn.microsoft.com}
Chú ý: Có thӇ kiӇm tra bҵng lӋnh nslookup msdn.micosoft.com cӫa
windows (bҩt kǤ phiên bҧn nào) đӇ so sánh kӃt quҧ
Dns class
IPAddess[] GetHostAddresses(string
HostnameOrAddress)
Trҧ vӅ mӝt tұp các đӏa chӍ IP (IPAddress[]) cӫa
hostname
Ví dө:
IPAddress[] ips;
ips = Dns.GetHostAddresses(³microsoft.com´);
àips = {207.46.232.182, 207.46.197.32}
Chú ý: có thӇ dùng nslookup đӇ kiӇm tra
Dns class
string GetHostName()
Xác đӏnh Hostname cӫa máy mà tiӃn trình thi hành hàm
này đang chҥy trên đó (local computer)
Ví dө:
string mycomputername = Dns.GetHostName();
=> mycomputername = sz650nc
Dns class
IPHostEntry GetHostByName (string hostname)
Phương thӭc này thi hành mӝt truy vҩn DNS (dns query)
đӕi vӟi hostname vӟi DNS server đã đưӧc cҩu hình
trong hӋ thӕng. KӃt quҧ trҧ vӅ gӗm:
± AddressList: mӝt mҧng các đӏa chӍ IP (mӝt hostname có thӇ gҳn
vӟi nhiӅu đӏa chӍ IP)
± Aliases: mӝt mҧng các bí danh
± Hostname: tên miӅn cӫa hostname.
Ví dө:
IPHostEntry iph = Dns.GetHostByName(³www.msdn.microsoft.com´);
à iph.HostName = msdn.micosoft.akadns.net
à iph.AddressList = {64.4.11.251}
à iph.Aliases = {msdn.microsoft.com}
Dns class
IPHostEntry GetHostByAddress(string address)
IPHostEntry GetHostByAddress(IPAddress address)
Trҧ vӅ thông tin (hostname, aliases, ip addresses) cӫa hostname khi
đã biӃt IP hoһc tên miӅn cӫa host.
Ví dө:
IPAddress ip = IPAddress.Parse(³64.4.11.251´);
IPHostEntry iph = Dns.GetHostByAddress(ip);
à iph.HostName = msdn.micosoft.akadns.net
à iph.AddressList = {64.4.11.251}
à iph.Aliases = {msdn.microsoft.com}
Chú ý: GetHostByAddress() không phҧi lúc nào cũng thi
hành đưӧc. Đӏa chӍ IP ko phҧi luc nào cũng phân giҧi
đưӧc -> host name.
IPAddress Class
Thuӝc namespace System.Net
ThӇ hiӋn đӏa chӍ IP
Các phương thӭc cơ bҧn
Boolean Equals(Object ip)
Trҧ vӅ TRUE nӃu hai đӏa chӍ ip giӕng nhau, FALSE trong các
trưӡng hӧp còn lҥi
Ví dө:
IPAddress ip1 = IPAddress.Parse("210.245.86.184");
IPAddress ip2 = IPAddress.Parse("210.245.86.184");
Boolean kq = ip1.Equals(ip2);
=> kq = true
IPAddress class
IPAddress Parse(string ip)
ChuyӇn mӝt đӏa chӍ ip trong khuôn dҥng
xâu ký tӵ -> IPAddress
ví dө:
IPAddress myip =
IPAddress.Parse("210.245.86.184");
IPAddress class
string toString()
Trҧ vӅ xâu ký tӵ thӇ hiӋn đӏa chӍ IP
Ví dө:
IPAddress ip1 =
IPAddress.Parse("210.245.86.184");
=> ip1.toString() = "210.245.86.184"
IPAddress class
Boolean IsLoopBack (IPAddress ip)
Trҧ vӅ true nӃu ip là mӝt đӏa chӍ loopback
cӫa hӋ thӕng, false trong các trưӡng hӧp
còn lҥi
ví dө:
IPAddress ip1 = IPAddress.Parse("210.245.86.184");
Boolean loopback = IPAddress.IsLoopback(ip1);
à Loopback = false
IPAddress class
IPAddress Any
Cung cҩp đӏa chӍ IP chӍ đӏnh cho server
phҧi lҳng nghe hành đӝng cӫa client trên
tҩt cҧ các interface.
ví dө:
IPAddress anyIP = IPAddress.Any;
=> anyIP.toString() = 0.0.0.0
IPAddress class
IPAddress Broadcast
Đӏa chӍ broadcast trong mҥng LAN
Ví dө:
IPAddress bIP = IPAddress.Broadcast;
=> bIP.toString() = 255.255.255.255
IPAddress class
IPAddress Loopback
Đӏa chӍ loopback cӫa hӋ thӕng
Ví dө:
string lip = IPAddress.Loopback.ToString();
=> lip = 127.0.0.1
IPAddress class
IPAddress None
ThӇ hiӋn hӋ thӕng không có network
interface.
ví dө:
string nip = IPAddress.None.ToString();
=> nip = 255.255.255.255
IPEndPoint class
Thuӝc namespace System.Net
ThӇ hiӋn mӝt network endpoint bao gӗm
IP address + port.
Sӱ dөng đӇ kӃt gán socket vӟi mӝt đӏa chӍ
ip trên hӋ thӕng và connect đӃn mӝt
server
Các phương thӭc cơ bҧn:
IPEndPoint class
IPEndPoint IPEndPoint(IPAddress ip, int p)
Hàm tҥo
ví dө:
IPAddress ip = IPAddress.Parse(³127.0.0.1´);
IPEndPoint ipep = new IPEndPoint(ip, 9090);
=> t̹o mͱt IPEndPoint t̹i máy local, cͭng là
9090.
IPEndPoint class
Thuӝc tính
IPAddress Address { get; set; }
ví dө:
IPAddress ip = IPAddress.Parse(³127.0.0.1´);
IPEndPoint ipep = new IPEndPoint(ip, 9090);
=> ipep.Address = 127.0.0.1
int Port { get; set; }
ví dө: như trên
=> ipep.Port = 9090
IPEndPoint class
AddressFamily AddressFamily { get; }
Trҧ vӅ kiӇu đӏa chӍ cӫa socket (ipv4, ipx,
spx, ...)
ví dө:
IPAddress ip = IPAddress.Parse(³127.0.0.1´);
IPEndPoint ipep = new IPEndPoint(ip, 9090);
=> ipep.AddressFamily = Internetwork (ipv4)
IPEndPoint class
int MaxPort
int MinPort
Ví dө
IPAddress ip =
IPAddress.Parse(³192.168.1.1´);
IPEndPoint ipep = new IPEndPoint(ip,80);
=>ipep.MinPort = 0
=>ipep.MaxPort = 65535
IPHostEntry class
Thuӝc namespace System.net
Lӟp này chӭa thông tin vӅ các đӏa chӍ host
Các thuӝc tính:
IPAddress[] AddressList { get; set; }
ThӇ hiӋn các đӏa chӍ IP cӫa host
string[] Aliases { get; set; }
ThӇ hiӋn các Aliases cӫa host
string HostName { get; set; }
ThӇ hiӋn tên miӅn cӫa host