Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 28 kết quả

Đề tài: Lập trình Winsock trong C# | Winsock programing with C#

  1. #1
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Lập trình Winsock trong C# | Winsock programing with C#

    Hôm nay sẽ không phải là chủ đề về Graphics nữa. ZC sẽ mở ra một chủ đề mới đó là về lập trình mạng (đây cũng là chủ đề mà ZC đã hứa sẽ viết cho nhóm Software của huynguyen mà tới hôm nay mới có thời gian rãnh để làm).

    Hiện nay thì môi trường mạng đang phát triển rất nhanh và gần như sự trao đổi dữ liệu giữa các máy tính đang trở nên rất cần thiết.

    Có khá nhiều giải pháp lập trình để làm việc với môi trường mạng như Remote, hay WebServices nhưng Winsock vẫn là những lý thuyết cơ bản nhất.

    Điều duy nhất mà ZC mong muốn đó là sẽ hỗ trợ cho mọi người.
    Mình sẽ cập nhật bài viết này sớm.
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 12-11-2008 lúc 12:37 AM.

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Dữ liệu truyền tải trên môi trường mạng

    I. Dữ liệu truyền tải

    Đầu tiên mình sẽ nói sơ qua về vấn đề dữ liệu được truyền tải trên môi trường mạng.

    Dữ liệu ở cấp độ thấp nhất là bit. Cao hơn là byte và còn vài cấp cao hơn nữa. Nhưng byte được xem là chuẩn đề truyền dữ liệu. Do vậy trước khi chúng ta gửi hay nhận bất cứ dữ liệu gì thì bắc buộc ta phải đưa dữ liệu của đối tượng đó về đơn vị byte.

    C# khác với C++ ở nhiều điểm. Và điểm khác rõ nhất là tất cả các kiểu dữ liệu của C# đều là đối tượng (object) Trong khi dữ liệu của C++ là các vùng nhớ trên bộ nhớ.

    Do đó ở C# bạn không thể ép kiểu từ string thành byte như C++ chuyển WCHAR* thành char*.

    Và chúng ta sẽ làm quen cách chuyển đổi này trên C#.

    Hiện nay chúng ta có 3 bảng mã chính, ngoài ra còn nhiều nữa nhưng ít được sử dụng:

    ASCII
    - Bảng mã ASCII thì mỗi ký tự là 1 byte.

    UTF8
    - Bảng mã UTF8 thì trong 1 chuỗi string không hẵn các ký tự là 1 byte, có khi nó tới 2,3 byte tùy thuộc vào ký tự đó.
    - Tức là những ký tự có trong mã ASCII thì nó chiếm 1 byte. Còn các ký tự đặc biệt như chữ 'ô' 'ê'... thì biểu diễn tới 2 hay 3 bytes tùy thuộc vào bảng mã.

    UTF16 hay Unicode
    - Bảng mã UTF16 thì sang hơn 1 chút. Các ký tự chiếm đều 2 bytes nên nó có thể biểu diễn mọi ngôn ngữ trên thế giới.
    - UTF16 có 2 loại là UTF16-LE (Unicode chuẩn) và UTF16-BE.
    - UTF16-BE (Big Endian) khác so với UTF16 (Little Endian) ở chỗ hoán đổi vị trí bytes trên 1 ký tự. Ví dụ :ký tự ở UTF16-LE có giá trị là 0xAABB thì UTF16-BE ký tự đó sẽ là là 0xBBAA
    + UTF16 được sử dụng khá rộng rãi.
    + UTF8 thì lại được sử dụng chính trên các giao thức như HTTP, SOAP vì nó tiết kiệm được dữ liệu.
    + ASCII khá cổ nhưng vẫn được sử dụng.

    Trong C# kiểu char chiếm 2 bytes. Kiểu byte chiếm 1 byte. string là đối tượng của mảng char[] nên nó thể hiện chuỗi Unicode.
    Vậy còn các kiểu như float, int32,... làm cách nào để chuyển thành byte[], giải pháp đặt ra là phải parse ( ToString() ) các kiểu này thành string rồi chuyển thành byte.

    1. Chuyển dữ liệu thành BYTE

    UTF16 thành ACSII
    Visual C# Code:
    1. string examString = "Đây là chuỗi UTF16!!!";
    2. byte[] ascii= ASCIIEncoding.ASCII.GetBytes(examString);

    UTF16 thành UTF8
    Visual C# Code:
    1. string examString = "Đây là chuỗi UTF16!!!";
    2. byte[] utf8= ASCIIEncoding.UTF8.GetBytes(examString);

    2. Chuyển BYTE thành các dữ liệu tương ứng

    ASCII thành Unicode

    Visual C# Code:
    1. string examString = "Đây là chuỗi UTF16!!!";
    2. byte[] ascii= ASCIIEncoding.ASCII.GetBytes(examString);
    3. // ASCII -> UNICODE
    4. string result = Encoding.ASCII.GetString(utf8);

    UTF8 thành Unicode

    Visual C# Code:
    1. string examString = "Đây là chuỗi UTF16!!!";
    2. byte[] utf8= ASCIIEncoding.UTF8.GetBytes(examString);
    3. // UTF8 -> UNICODE
    4. string result = Encoding.UTF8.GetString(utf8);
    Đã được chỉnh sửa lần cuối bởi nhc1987 : 27-11-2008 lúc 12:13 AM.

  3. #3
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Địa chỉ IP (IP Address)

    II. Address

    1. Địa chỉ IP

    Khi bạn gửi 1 bức thư, 1 điều cần thiết nhất là bạn phải có địa chỉ nơi nhận. Và trên Internet cũng vậy, mỗi host truy cập lên mạng thì sẽ có 1 IP để xác định chính nó.

    Ip có 2 loại là V4 (4bytes) và V6 (6bytes).

    Ta sẽ xét cấu trúc V4 vì nó đang được sử dụng.

    1 địa chỉ IP thì nó chứa 2 thông tin:
    + NetID: Chỉ ra "đường mạng" (dựa vào đường mạng người ta lại phân lớp: A, B, C).
    + HostID: Là ID của máy tính trên đường mạng đó.

    2 Host chỉ có thể trao đổi trực tiếp dữ liệu khi 2 host đó cùng trên 1 đường mạng. Còn nếu khác đường mạng thì nó phải đi qua các thiết bị chuyên dụng gọi là Router. ASDL Modem cũng chính là 1 router nhưng nó không phải là Router chuyên dụng. Nó chỉ có 1 chức năng của router chính là NAT (Network Address Translate - Chuyển đổi đường mạng).


    Nếu muốn nói sâu về IP thì có thể mất cả 1 tut nữa. Mình sẽ nôn na như thế này.

    Trích dẫn Nguyên bản được gửi bởi ZCoder87

    Chúng ta tưởng tượng TP HCM như là mạng Internet. "Đường mạng" chính là 1 con đường nào đó trong TP. Như vậy Quận có thể xem như là "lớp của IP (IP chia thành lớp 3 lớp A,B,C còn 2 lớp không sử dụng)".

    Bạn là một packet (gói tin) đang muốn đi từ điểm A tới điểm B trên thành phố?

    Vậy:
    - Nếu như điểm B và A cùng 1 con đường thì bạn có thể đi thẳng được. (Đây là trường hợp các host trong cùng 1 mạng LAN)

    - Còn nếu khác đường mạng (có thể LAN hoặc WAN). Thì bạn sẽ phải qua các ngã 3, 4.... Chúng ta xem điểm này như là các Router, tại đó nó sẽ có bảng chỉ dẫn để chúng ta đi đúng đường. Và bạn sẽ phải qua rất nhiều Router mới có thể đến được điểm B.

    Và đó cũng là quy luật của Internet.
    Chúng ta có thể kiểm chứng 1 ví dụ để biết được đường đi qua các router.
    - Vào Start -> Run -> cmd (enter)
    - Sau đó gõ lệnh "tracert google.com.vn"

    Bạn có thể xem thêm thông tin về IP ở Lập Trình Mạng Với Thư Viện Winsock trên VC++

    a. Đối tượng IPAddress

    Namespace: using System.Net;

    1 IP sẽ chiếm hết 4 bytes. Do đó có thể xem như kiểu long hoặc byte[4].

    Để thiết lập 1 địa chỉ IP chúng ta có thể dùng cách sau:

    Từ 1 mảng bytes[4]
    Visual C# Code:
    1. // Thiet lap IP 203.162.4.190
    2. byte []dnsIP = {203,162,4,190};
    3. IPAddress ip = new IPAddress(dnsIP);
    4.  
    5. Console.WriteLine(ip);

    Hoặc từ 1 string:
    Visual C# Code:
    1. byte[] ipFromString(string ipString)
    2. {
    3.     string[] byteString = ipString.Split(new char[] { '.' });
    4.     byte[] adr = new byte[4];
    5.  
    6.     adr[0] = byte.Parse(byteString[0]);
    7.     adr[1] = byte.Parse(byteString[1]);
    8.     adr[2] = byte.Parse(byteString[2]);
    9.     adr[3] = byte.Parse(byteString[3]);
    10.  
    11.     return adr;
    12. }

    và sau đó thì:

    Visual C# Code:
    1. string ipString = "210.245.0.11";
    2.  
    3. IPAddress ip = new IPAddress(ipFromString(ipString));
    4. Console.WriteLine(ip);

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Hệ thống phân giải tên miền (DNS)

    2. Hệ thống phân giải tên miền (DNS)

    IP là 1 khái niệm không thể thiếu trong network nhưng thực tế thì có khá nhiều người không biết IP vì nó quá phức tạp và khó nhớ.

    Do đó hệ thống DNS ra đời. Nó là 1 database lưu trữ tên miền và IP. Mỗi hàng trên database đó gọi là DNS Record

    1 Record có cấu trúc như sau

    DNS Record Code:
    1. Host1.domain.name.    IN      A       xx.xx.xx.xx(IPv4 address)
    2. ;Ví dụ như:
    3. congdongcviet.com         IN A  202.134.18.60
    4. forums.congdongcviet.com  IN A  67.215.225.185

    Những dòng này lưu trên 1 file tại 1 Server và Server đó có chạy dịch vụ DNS Server. Và sự ra đời của nó làm người ta quên đi số IP.

    a. Dns (static class)

    Đối tượng static này chứa các module giúp ta có thể làm việc với IP một cách tốt nhất.

    - Dns.GetHostName(): Trả về tên máy tính của bạn.
    - Dns.GetHostAddresses(): Lấy danh sách các địa chỉ IP theo tên máy (phân giải thuận. Từ Tên miền -> IP)
    - Dns.GetHostEntry(): Lấy toàn bộ thông tin host theo IP hoặc tên máy.
    - Dns.Resolve(): Tương tự GetHostEntry.

    b. Lấy thông tin máy tính của mình

    Bao gồm tên máy và danh sách IP:
    Visual C# Code:
    1. Console.WriteLine("About my computer");
    2. Console.WriteLine("- Computer name: \"{0}\"",Dns.GetHostName());
    3.  
    4. IPAddress []myIP = Dns.GetHostAddresses(Dns.GetHostName());
    5. foreach (IPAddress ip in myIP)
    6. {
    7.      Console.WriteLine("- IP {0}: {1}", ip.AddressFamily.ToString(), ip.ToString());
    8. }

    Output Code:
    1. About my computer
    2. - Computer name: "Compaq-PC"
    3. - IP InterNetworkV6: fe80::c8d6:38eb:9688:d5b8%12
    4. - IP InterNetwork: 192.168.1.8
    5. Press any key to continue . . .

    Theo kết quả thì mình có 2 IP:
    - IP V4 của mình là: 192.168.1.8
    - IP V6: fe80::c8d6:38eb:9688:d5b8%12

    c. Lấy thông tin máy tính của mình

    Hệ thống phân giải:
    Visual C# Code:
    1. Console.Write("Nhap ten mien hoac ip: ");
    2. string host = Console.ReadLine();
    3.            
    4. IPHostEntry e = Dns.GetHostEntry(host);
    5. Console.WriteLine("Hostname: {0}", e.HostName);
    6.  
    7. // In tên miền hoặc bí danh
    8. foreach (string s in e.Aliases)
    9.       Console.WriteLine("\t+ Alias: {0} \n", s);
    10.  
    11. // Danh sách điạ chỉ IP
    12. foreach (IPAddress i in e.AddressList)
    13.       Console.WriteLine("\t+ IP: {0}", i);

    Ví dụ:

    Phân giải IP

    Output Code:
    1. Nhap ten mien hoac ip: 203.162.4.190
    2. Hostname: hcm-server01.vnn.vn
    3. + IP: 203.162.4.190
    4. Press any key to continue . . .


    Phân giải tên miền

    Output Code:
    1. Nhap ten mien hoac ip: google.com.vn
    2. Hostname: google.com.vn
    3.         + IP: 209.85.171.104
    4.         + IP: 72.14.235.104
    5.         + IP: 72.14.207.104
    6. Press any key to continue . . .

    Còn tiếp...
    Đã được chỉnh sửa lần cuối bởi nhc1987 : 27-11-2008 lúc 12:14 AM.

  5. #5
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Port

    II. PORT

    Tiếp tục topic của mình hôm nay sẽ nói về port. Port là một số unsigned int đánh dấu trong packet để gửi đi trên mạng. Và hệ điều hành sẽ phân tích số port này từ packet nhận để phẩn loại packet này của chương trình nào.

    Trong Network thì port là một giá trị rất quan trọng

    - Port có thể sử dụng để phân loại gói tin. Nhờ đó mà firewall có thể chặn hay cho phép nó đi qua.

    - Ngoài ra Port còn được sử dụng trong kỹ thuật NAT. Giả sử 1 hệ thống mạng LAN có 20 PC thì có tới 20 IP LAN nhưng khi ra mạng internet thì chỉ dùng chung 1 IP WAN (IP này phải đăng ký từ ISP) và thiết bị có IP WAN đó còn gọi là gateway (gateway có thể là router, hay modem hoặc có thể là 1 server).

    Như vậy để nhiều máy tính cùng sử dụng chung 1 IPWAN như vậy thì gateway đã dùng số port để đánh dấu số máy tính. Ví dụ máy số 10 ra net thì nó sẽ khởi tạo ngẫy nhiêu 1 port như 22222. Máy số 11 ra net thì nó cũng làm tương tự như vậy: 123123. Khi gói tin được gởi về gateway thì nó lại phân loại số port này để chuyển đúng PC.
    Việc sử dụng port để thay thế IP có 1 ý nghĩa rất to lớn vì nó đã giúp cho cả thế giới có đủ IP để truy cập Internet.
    Sử dụng NAT PORT là công nghệ của phần cứng, thiết bị mạng.

    Còn với winsock hay công nghệ phân mềm thì chúng ta chỉ quan tâm port như 1 số hiệu để xác định dịch vụ mạng

    Ví dụ:
    Text Code:
    1. Dịch vụ FTP sử dụng 2 port
    2. - port 20: Tín hiệu lệnh,
    3. - port 21: Truyền tải file
    4.  
    5. Dịch vụ SSH (điều khiển máy tính từ xa)
    6. - port 22
    7.  
    8. Dịch vụ Telnet (truy xuất vào máy tính từ xa).
    9. - port 23
    10.  
    11. Mail:
    12. - port 24
    13. - port 25
    14.  
    15. DNS:
    16. - port 53
    17.  
    18. WEB (html)
    19. - port 80: Giao thức HTTP
    20. - port 443: HTTPS
    21.  
    22. ...

    Đó là một số port thông dụng. Và bạn cũng có thể tìm 1 port nào đó trong dãy số uint để làm 1 dịch vụ riêng ví dụ như CHAT chẳng hạn.

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định Đối tượng IPEndpoint

    Đối tượng IPEndpoint

    Đây là đối tượng mà nó bao gồm 2 thông tin chính là IP Host và cả Port.

    Visual C# Code:
    1. {
    2.           // Lấy danh sách IP congdongcviet.com
    3.           IPAddress[] ipServer = Dns.GetHostAddresses("congdongcviet.com");
    4.          
    5.           // Kết nối port 80
    6.           IPEndPoint server = new IPEndPoint(ipServer[0], 80);              
    7. }
    8. catch (Exception)
    9. {
    10.           Console.WriteLine("DNS Error");
    11. }
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 13-11-2008 lúc 09:12 PM.

  7. #7
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Mặc định CHƯƠNG TRÌNH CLIENT - TCP client

    Hôm nay mình sẽ đi vào phần chính...

    I. CHƯƠNG TRÌNH CLIENT

    1. TCP Client

    a. Kết nối
    .NET có hỗ trợ sẵn một đối tượng dành cho Client. Đó là lớp đối tượng TCPClient

    Ví dụ như kết nối tới port 80 của Server congdongcviet.com:
    Visual C# Code:
    1. IPAddress[] ipServer = Dns.GetHostAddresses("congdongcviet.com");
    2. IPEndPoint server = new IPEndPoint(ipServer[0], 80);
    3.  
    4. // Ket noi toi server
    5. TcpClient client = new TcpClient();
    6. client.Connect(server);

    Yêu cầu duy nhất để khởi tạo TCPClient là địa chỉ host và port host. Nó đã được định nghĩa ở IPEndPoint

    b. Truyền và nhận dữ liệu

    Bản chất của truyền và nhận dữ liệu cũng như ghi và đọc 1 stream (NetworkStream)

    Visual C# Code:
    1. NetworkStream htmlProtocol = client.GetStream();
    2.                
    3. // Thong tin header
    4. string header = String.Format("GET / HTTP/1.1\nHost: {0}\nUser-Agent:{1}\n\n",
    5.          "congdongcviet.com",
    6.          "ZClient");
    7. byte[] byteHeader = ASCIIEncoding.ASCII.GetBytes(header);
    8.                
    9. // {*} Gui du lieu cho Server
    10. htmlProtocol.Write(byteHeader,0,byteHeader.Length);

    Đoạn code trên sẽ gửi 1 đoạn message như sau tới server:

    Output Code:
    1. GET / HTTP/1.1\n
    2. Host: congdongcviet.com \n
    3. User-Agent: ZClient \n\n

    Và cũng chính là là giao thức HTTP.

    c. Nhận dữ liệu

    NetworkStream có 2 cơ chế nhận dữ liệu rất cơ bản là:
    - ReadByte() Nhận từng byte.
    - Read() Nhận một lượng bytes nào đó.

    Cách tốt nhất là mình ví dụ code, mình đã note code rồi:

    Dưới đây là cách nhận từng byte một.

    Visual C# Code:
    1. static void Connect(string domain)
    2. {
    3.       try
    4.       {
    5.             // Phan giai ten mien: domain -> ip
    6.             IPAddress[] ipServer = Dns.GetHostAddresses(domain);
    7.             IPEndPoint server = new IPEndPoint(ipServer[0], 80);
    8.  
    9.             // Ket noi toi server
    10.             TcpClient client = new TcpClient();
    11.             client.Connect(server);
    12.  
    13.             NetworkStream htmlProtocol = client.GetStream();
    14.  
    15.             // Thong tin header
    16.             string header = String.Format("
    17.                  GET / HTTP/1.1\n
    18.                  Host: {0}\
    19.                  nUser-Agent:{1}\n\n",
    20.                         domain,
    21.                         "ZClient");
    22.             byte[] byteHeader = ASCIIEncoding.ASCII.GetBytes(header);
    23.  
    24.  
    25.             // {*} Gui du lieu cho Server
    26.             htmlProtocol.Write(byteHeader, 0, byteHeader.Length);
    27.  
    28.             Console.WriteLine("Header from {0}", domain);
    29.  
    30.             // {*} Nhan du lieu tu server
    31.             int nEndHeader = 0;
    32.             while (nEndHeader != 4)
    33.             {
    34.                   char b = (char)htmlProtocol.ReadByte();
    35.  
    36.                   Console.Write(b);
    37.  
    38.                   // Khi nhan chuoi ky tu \r\n\r\n thi het Header
    39.                   if (b == '\n' || b == '\r')
    40.                         nEndHeader++;
    41.                   else
    42.                         nEndHeader = 0;
    43.             }            
    44.       }
    45.       catch (Exception e)
    46.       {
    47.             Console.WriteLine(e.Message);
    48.       }
    49. }

    Và đây là kết quả response theo giao thức http của các webserver. Nó có thể cho ta biết server tên gì và chạy hdh gì.

    Output Code:
    1. Connect("google.com");
    2.  
    3. HTTP/1.1 301 Moved Permanently
    4. Location: http://www.google.com/
    5. Content-Type: text/html; charset=UTF-8
    6. Date: Tue, 18 Nov 2008 07:19:23 GMT
    7. Expires: Thu, 18 Dec 2008 07:19:23 GMT
    8. Cache-Control: public, max-age=2592000
    9. [B]Server: gws[/B]
    10. Content-Length: 219

    Của congdongcviet.com nhà ta:
    Output Code:
    1. Connect("congdongcviet.com");
    2.  
    3. HTTP/1.1 200 OK
    4. Content-Length: 14121
    5. Content-Type: text/html
    6. Content-Location: http://congdongcviet.com/index.htm
    7. Last-Modified: Thu, 06 Nov 2008 04:32:07 GMT
    8. Accept-Ranges: bytes
    9. ETag: "a4ba69a0c83fc91:197e4"
    10. [B]Server: Microsoft-IIS/6.0
    11. X-Powered-By: ASP.NET[/B]
    12. Date: Tue, 18 Nov 2008 07:20:04 GMT


    Output Code:
    1. Connect("forums.congdongcviet.com");
    2.  
    3. HTTP/1.1 200 OK
    4. Date: Tue, 18 Nov 2008 07:25:56 GMT
    5. [B]Server: Apache
    6. X-Powered-By: PHP/5.2.6[/B]
    7. Cache-Control: private
    8. Pragma: private
    9. Set-Cookie: bbsessionhash=e72b5bfe86b49410e3492d3b26bcb904; path=/; HttpOnly
    10. Set-Cookie: bblastvisit=1226993156; expires=Wed, 18-Nov-2009 07:25:56 GMT; path=/
    11. Set-Cookie: bblastactivity=0; expires=Wed, 18-Nov-2009 07:25:56 GMT; path=/
    12. Transfer-Encoding: chunked
    13. Content-Type: text/html; charset=utf-8
    Còn tiếp...
    Đã được chỉnh sửa lần cuối bởi nhc1987 : 27-11-2008 lúc 12:16 AM.

  8. #8
    Ngày gia nhập
    10 2008
    Bài viết
    258

    cho mình hỏi.nếu mình tăng nEndHeader != 4 lên 100 lần thì đọc được cả body.nhưng mà khi đọc hết nó lại lấy gia trị nuLL bây giờ phải làm sao để đọc hết thì nó thôi!

  9. #9
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    nEndHeader == 4 có nghĩa là khi nó gặp dấu hiệu kết thúc Header là "2 lần xuống hàng" (\r\n\r\n hay là \n\n\n\n)

    Còn phần Body thì mình chưa load. Định tiếp viết phần đó tiếp theo nhưng chưa có thời gian rãnh. Để dọc được body thì bạn có thể đọc 1 lúc 512 bytes chứ ko phải 1 byte nữa, Và read nhiều lần như thế để lấy hết nội dung body website, nếu hàm read trả về giá trị < 512 có nghĩa là kết thúc body.

    Còn việc bạn tăng lên 100 có thể chương trình sẽ gặp exception
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 31-12-2008 lúc 05:32 PM.

  10. #10
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Trích dẫn Nguyên bản được gửi bởi ZCoder87 Xem bài viết
    [size=3][COLOR="Sienna"][b]
    Hoặc từ 1 string:
    Visual C# Code:
    1. byte[] ipFromString(string ipString)
    2. {
    3.     string[] byteString = ipString.Split(new char[] { '.' });
    4.     byte[] adr = new byte[4];
    5.  
    6.     adr[0] = byte.Parse(byteString[0]);
    7.     adr[1] = byte.Parse(byteString[1]);
    8.     adr[2] = byte.Parse(byteString[2]);
    9.     adr[3] = byte.Parse(byteString[3]);
    10.  
    11.     return adr;
    12. }

    và sau đó thì:

    Visual C# Code:
    1. string ipString = "210.245.0.11";
    2.  
    3. IPAddress ip = new IPAddress(ipFromString(ipString));
    4. Console.WriteLine(ip);
    Dùng vậy dễ hơn nè
    Visual C# Code:
    1. IPAddress ip = IPAddress.Parse(hostname)

Các đề tài tương tự

  1. Sử dụng winsock để kiểm tra dịch vụ có online ko trong VC++ 2005?
    Gửi bởi sonnb trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 20
    Bài viết cuối: 20-12-2012, 08:50 PM
  2. Hoạt động của hàm accept connection trong Winsock(Lap trinh mạng)?
    Gửi bởi sasadudu trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 1
    Bài viết cuối: 23-03-2011, 11:11 AM
  3. Phân biệt dữ liệu nhận được trong lập trình winsock.
    Gửi bởi Joker trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 21-01-2011, 10:30 AM
  4. Cách tạo Thread trong lập trình WinSock.
    Gửi bởi snake_programmer trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 09-01-2011, 01:54 PM
  5. Đa luồng trong lập trình WinSock xử lý như thế nào?
    Gửi bởi Socket trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 30-12-2010, 11:55 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn