• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Cách lấy IP thực khi máy truy cập internet !!!

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
Hình đại diện của người dùng
skatervn
Thành viên danh dự
Thành viên danh dự
Bài viết: 181
Ngày tham gia: T.Tư 16/04/2008 9:44 am
Đến từ: Đà Nẵng
Been thanked: 2 time

Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi skatervn » T.Hai 24/11/2008 9:51 pm

Thủ thuật: Cách lấy IP chính dùng để vào internet (dùng với máy có kết nối internet)
Tác giả: Sưu tầm
Mô tả: Cái này dùng để lấy ip thực của máy khi vào mạng internet. Lưu ý cái này khác với cái IP của card mạng trong máy đó nha!


Mã: Chọn hết

  1.  
  2. Private Declare Function URLDownloadToFile Lib "urlmon" _
  3.    Alias "URLDownloadToFileA" _
  4.   (ByVal pCaller As Long, _
  5.    ByVal szURL As String, _
  6.    ByVal szFileName As String, _
  7.    ByVal dwReserved As Long, _
  8.    ByVal lpfnCB As Long) As Long
  9. Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
  10.    Alias "DeleteUrlCacheEntryA" _
  11.   (ByVal lpszUrlName As String) As Long
  12.  
  13. Public Function GetPublicIP()
  14.    Dim sSourceUrl As String 'chứa đường dẫn web có cơ chế lấy được IP thực của mình. Cái này bạn có thể test trên trình duyệt rồi bỏ vào
  15.    'Tuy nhiên lưu ý cấu trúc của trang đó như thế nào. Cái link cài đặt bên dưới là mình dùng nguyên của source gốc. Cấu trúc rất đơn giản
  16.     'để dễ xử lý khi lưu file về máy.
  17.    Dim sLocalFile As String 'Tên file sẽ được lưu nội dung lấy về từ link trên
  18.    Dim hfile As Long
  19.    Dim buff As String
  20.    Dim pos1 As Long
  21.    Dim pos2 As Long
  22.    sSourceUrl = "http://vbnet.mvps.org/resources/tools/getpublicip.shtml"
  23.    sLocalFile = "c:\ip.txt"
  24.    Call DeleteUrlCacheEntry(sSourceUrl) 'Xoa cache url nay neu da co ton tai (tranh tinh trang ip dong)
  25.    If DownloadFile(sSourceUrl, sLocalFile) Then 'Lưu nội dung của Url trên về sLocalFile
  26.      'Đoạn lệnh bên dưới sẽ xử lý nội dung sLocalFile lưu về, cái này theo format của trang chính dùng để getIP
  27.       hfile = FreeFile
  28.       Open sLocalFile For Input As #hfile
  29.          buff = Input$(LOF(hfile), hfile)
  30.       Close #hfile
  31.       pos1 = InStr(buff, "var ip =")
  32.       If pos1 Then
  33.          pos1 = InStr(pos1 + 1, buff, "'", vbTextCompare) + 1
  34.          pos2 = InStr(pos1 + 1, buff, "'", vbTextCompare) '- 1
  35.          GetPublicIP = Mid$(buff, pos1, pos2 - pos1)
  36.       Else
  37.          GetPublicIP = "Chuong trinh khong the lay duoc dia chi IP WAN cua may ban"
  38.       End If
  39.       Kill sLocalFile 'Xóa file sau khi xử lý xong, nếu bạn muốn xem nội dung file thì hay bỏ qua câu lệnh này
  40.    Else
  41.       GetPublicIP = "Chuong trinh khong the lay duoc dia chi IP WAN cua may ban"
  42.    End If
  43. End Function
  44. Private Function DownloadFile(ByVal sURL As String, _
  45.                              ByVal sLocalFile As String) As Boolean
  46.    
  47.   DownloadFile = URLDownloadToFile(0, sURL, sLocalFile, 0, 0) = ERROR_SUCCESS
  48.    
  49. End Function
  50. 'Thêm một command để gọi thực thi
  51. Private Sub Command1_Click()
  52.    MsgBox GetPublicIP
  53. End Sub
  54.  
  55.  

Hix đây là lần đầu tiên mình post bài. Nói chung có gì sai sót thì mong mọi người thông cảm và xí xóa cho.
Mình đang làm một dự án có liên quan đến phần này, tìm được đoạn code này thấy hay hay nên post lên cho mọi người tham khảo. Nhưng mình dùng một link khác để lấy IP thực nên phải cài đặt lại đoạn xử lý kết quả lấy về, hix không biết bác nào có cách toàn diện và đơn giản hơn không? Mong chia sẽ lại vì mình thấy đoạn này còn phụ thuộc ngoại cảnh nhiều quá (cái link trên mà die là tiêu chương trình luôn báo không có IP).
Ah cái này có thể xem như một phần để biết máy mình hiện thời có vào mạng internet đc không.
Sửa lần cuối bởi skatervn vào ngày T.Ba 25/11/2008 9:41 pm với 1 lần sửa.



Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Cách lấy IP thực khi máy có vào Internet !!!

Gửi bàigửi bởi truongphu » T.Ba 25/11/2008 7:17 pm

Cảm ơn bạn skatervn đã sưu tầm bài IP mà nhiều người trông đợi
skatervn đã viết:..không biết bác nào có cách toàn diện và đơn giản hơn không? Mong chia sẽ lại vì mình thấy đoạn này còn phụ thuộc ngoại cảnh nhiều quá (cái link trên mà die là tiêu chương trình luôn báo không có IP).

Theo yêu cầu, tôi viết lại ngen:

Mã: Chọn hết

  1. Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
  2.    ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
  3. Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
  4. ' Viêt lai code truongphu
  5. Private Function DownloadFile() as Long
  6. szURL = "http://myip.dnsomatic.com/": szFileName = "C:\myIP.txt"
  7.  Call DeleteUrlCacheEntry(szURL)
  8.   DownloadFile = URLDownloadToFile(0, szURL, szFileName, 0, 0)
  9. End Function
  10.  
  11. Private Sub Form_Load()
  12. Call DownloadFile
  13. Open "C:\myIP.txt" For Input As #1
  14. Line Input #1, textline: Close #1
  15. MsgBox textline
  16. End Sub

Đáp ứng rất nhanh =D>
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
skatervn
Thành viên danh dự
Thành viên danh dự
Bài viết: 181
Ngày tham gia: T.Tư 16/04/2008 9:44 am
Đến từ: Đà Nẵng
Been thanked: 2 time

Re: Cách lấy IP thực khi máy có vào Internet !!!

Gửi bàigửi bởi skatervn » T.Ba 25/11/2008 9:38 pm

Hix cái link này mình vừa thử. Hay và gọn thiệt. Nhưng quan trọng không biết làm sao nó lấy được IP truy cập internet của mình nhỉ (đây là cái mình thắc mắc chính, chứ có rồi và lấy về xử lý in ra thì dễ)?

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi truongphu » T.Tư 26/11/2008 5:35 am

skatervn đã viết:Hix cái link này mình vừa thử. Hay và gọn thiệt. Nhưng quan trọng không biết làm sao nó lấy được IP truy cập internet của mình nhỉ (đây là cái mình thắc mắc chính, chứ có rồi và lấy về xử lý in ra thì dễ)?

Khi máy mình lò dò vào mạng thì các gói thông tin của mình lập tức kèm địa chỉ IP Internet mà nhà cung cấp mạng (vd viettel) gán cho. Bản thân Windows chỉ quản lý từ máy đến modem nên chỉ biết IP của LAN. Do đó phải nhờ một địa chỉ trên internet chuyên lọc địa chỉ IP Internet nầy ra, và gởi lại thông tin cho chúng ta. Cơ chế hai bài code trên là vậy.
http://myip.dnsomatic.com/ là địa chỉ mà trang web OpenDNS (chuyên phân tích tên miền) sử dụng để nhận biết ngay IP Internet của chúng ta.
Bạn mở Google, gõ my ip sẽ thấy rất nhiều địa chỉ cung cấp IP Internet, vd "http://myip.dk/" ...vv
Tuy nhiên tập tin chúng ta download xuống có chứa IP lại khá phức tạp, vd với địa chỉ trên muốn lọc ra phải lấy dòng 5. Tôi chọn http://myip.dnsomatic.com/ vì thông tin nó gởi xuống quá đơn giản: duy nhất số IP internet như bạn thấy
Chúc skatervn vui
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi truongphu » T.Tư 26/11/2008 11:25 am

Sau đây là cơ chế tìm IP/Internet không phụ thuộc một địa chỉ Internet bên ngoài:
(cho đến nay hình như chưa ai nghĩ đến! :)) )
Tôi đang dùng Modem ADLS CNet
1- Chạy Cmd, gõ telnet 10.0.0.2 ENTER -> Đó là địa chỉ mặc định của modem, trình Telnet hiện ra tải chương trình của Modem CNet, hỏi mật khẩu
2- Gõ 'epicrouter' (không có nháy đơn) ENTER -> đó là mật khẩu mặc định, Main Menu hiện ra
3- Gõ số 3 ENTER -> vào Connection Status
4- Gõ số 5 ENTER -> vào WAN Status
5- Gõ số 1 ENTER -> để Display Status
Xuất hiện thông tin cần biết

Bây giờ với 5 bước trên chuyển qua code VB6 là xong

Mã: Chọn hết

  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2.  ' Giai thuât và Code by truongphu. Ghi chú: Chuyên Cho Modem CNet !!!
  3. Private Sub Form_Load()
  4. Dim UngDung
  5. UngDung = Shell("telnet 10.0.0.2", 1)
  6. Call Sleep(2000)
  7. AppActivate UngDung
  8. SendKeys "epicrouter", True
  9. SendKeys "{ENTER}", True
  10. Call Sleep(2000)
  11. SendKeys "3", True
  12. SendKeys "{ENTER}", True
  13. Call Sleep(2000)
  14. SendKeys "5", True
  15. SendKeys "{ENTER}", True
  16. Call Sleep(2000)
  17. SendKeys "1", True
  18. SendKeys "{ENTER}", True
  19. End Sub

OK chứ? :D
Sửa lần cuối bởi truongphu vào ngày T.Tư 26/11/2008 8:16 pm với 1 lần sửa.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

gatoi_it
Thành viên trung thành
Thành viên trung thành
Bài viết: 207
Ngày tham gia: T.Tư 26/03/2008 6:10 pm
Đến từ: Quê cha đất tổ
Been thanked: 4 time
Liên hệ:

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi gatoi_it » T.Tư 26/11/2008 6:15 pm

Cái modem của cháu là BILLION nó ko giống thế bác à.
Gõ telnet 192.168.1.254
Gõ mật khẩu là "admin"
hiện ra dòng chờ "router>"
Thử nhấn số 3 nó bảo

Password: *****
Copyright (c) 2001 - 2006 ADSL Company
router> 3
Valid commands are:
sys exit ether wan
etherdbg usb ip bridge
dot1q pktqos show set
lan

ko biết chọn cái gì tiếp
Mà cách của bác nó hiện ra ở cửa sổ khác à? Nếu vậy lại phải cần dùng API để get đúng ko bác?
XFARM.CC

anton
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 66
Ngày tham gia: CN 16/07/2006 7:55 am
Liên hệ:

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi anton » T.Tư 26/11/2008 6:29 pm

máy cháu gõ telnet, báo lỗi: Connecting To 10.0.0.2...Could not open connection to the host, on port 23: Connect failed. :|
Em iu bác Phạm, bác Chuối (The Last Leaf), bạn To, bạn Trí :D
---
My blog: http://360.yahoo.com/tk.duong
My website: http://truckhuyen.googlepages.com

gatoi_it
Thành viên trung thành
Thành viên trung thành
Bài viết: 207
Ngày tham gia: T.Tư 26/03/2008 6:10 pm
Đến từ: Quê cha đất tổ
Been thanked: 4 time
Liên hệ:

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi gatoi_it » T.Tư 26/11/2008 6:47 pm

anton đã viết:máy cháu gõ telnet, báo lỗi: Connecting To 10.0.0.2...Could not open connection to the host, on port 23: Connect failed. :|


sửa cái "telnet 10.0.0.2" thành cái số mà modem mình cung cấp, số mà để config modem đó. Xem ở trong sách hướng dẫn của modem hay lên google gõ hãng sản xuất modem để biết cái số đó.
truongphu đã viết:Tôi đang dùng Modem ADLS CNet

Modem ADSL CNet có số là 10.0.0.2 còn của Billion 192.168.1.254
XFARM.CC

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi truongphu » T.Tư 26/11/2008 8:13 pm

Cảm ơn anton và gatoi_it đã đọc bài và test, nhất là gatoi_it đã bổ sung thông tin Modem.
Tôi xin bổ sung Code trên là chuyên cho CNet (vì tôi chỉ có nhiêu ấy) :D
1- Nhờ hai bạn Run Telnet bình thường. (làm nháp ấy mà)
2- Gõ số IP mặc định của Modem Router như...Billion là 192.168.1.254
3- Gõ Mật khẩu mặc định (mỗi Modem một khác!) --> (có khi ta còn thay đổi nữa là)
4- Telnet sẽ load chương trình mặc định trong Modem: mỗi modem chắc có khác nhau
5- Tùy theo thông tin, các bạn sẽ xác định sẽ Sendkeys nội dung gì tiếp theo
không nhất thiết phải cứ 3,5,1 như CNet
Chúc các bạn thành công, hoặc cứ sắm con CNet để hợp với code trên :))
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi truongphu » T.Tư 26/11/2008 8:47 pm

TÊN THIẾT BỊ / ĐỊA CHỈ IP / USER NAME / PASSWORD

1. TrendNET / 192.168.0.1 / admin / password
2. Zoom X4,X5,X6 / 10.0.0.2 / admin / zoomadsl
3. Planet / 10.0.0.2 / admin / epicrouter
4. AZTech / 10.0.0.2 / admin / (trống)
5. GVC / 10.0.0.2 / admin / conexant
6. CNET / 10.0.0.2 / admin / epicrouter
7. SpeedTouch 530 / 10.0.0.138 / (trống) / (trống)
8. Draytech Virgo 2500,2600 / 192.168.1.1 / admin / (trống)
9. Justec / 10.0.0.2 / admin / epicrouter
10. Huawei / 192.168.1.1 / admin / admin
11. Zyxel / 192.168.1.1 / admin / 1234
12. Alilied Telesyn AT-AR256E / 192.168.1.1 / admin / admin
Tập tin đính kèm
Giá trị mặc định của một số loại modem ADSL.jpg
Nhấn vào để phóng to
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi truongphu » T.Bảy 11/04/2009 9:17 pm

Mã: Chọn hết

  1. Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
  2. Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
  3. Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
  4. Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
  5. Private Const IF_NO_CACHE_WRITE = &H4000000
  6. Private Const BUFFER_LEN = 16
  7.  
  8. Private Function GetUrlSource(sURL As String) As String
  9.     Dim sBuffer As String * BUFFER_LEN
  10.     Dim hInternet As Long, hSession As Long, lReturn As Long
  11. 'Code: NoBi, truongphu u'ng dung
  12.     hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
  13.     hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
  14.     Call InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
  15.     Call InternetCloseHandle(hInternet)
  16.     GetUrlSource = sBuffer
  17. End Function
  18.  
  19. Private Sub Command1_Click()
  20. MsgBox GetUrlSource("http://myip.dnsomatic.com/")
  21. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi truongphu » CN 12/04/2009 8:28 am

Sơ kết cách dò tìm Internet IP (theo thời gian đã đăng)

1- Dùng API tải trang web và đọc:
viewtopic.php?f=28&p=42187#p27502

2- Giao tiếp với Modem ADSL (viết rue6ng Modem CNet)
viewtopic.php?f=28&p=42187#p27578

3- Dùng API đọc trực tiếp trang web:
viewtopic.php?f=28&p=42187#p42187

4- Dùng WinSock nhận gói tin

Mã: Chọn hết

  1. Private Sub Form_Load()
  2. Winsock1.Connect "myip.dnsomatic.com", 80
  3. End Sub  'Code: truongphu
  4.  
  5. Private Sub Winsock1_Connect()
  6. Winsock1.SendData "GET / HTTP/1.1" & vbCrLf & "Host: myip.dnsomatic.com" & vbCrLf & vbCrLf
  7. End Sub
  8.  
  9. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  10. Dim gS As String, xStr As String
  11. Winsock1.GetData gS
  12. Winsock1.Close
  13.     xStr = Mid(gS, InStr(gS, "charset=UTF-8" & vbCrLf) + 15)
  14.     Print xStr
  15. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

baohiep
Thành viên danh dự
Thành viên danh dự
Bài viết: 109
Ngày tham gia: CN 27/12/2009 6:37 pm
Đến từ: Tam Kỳ
Has thanked: 3 time
Been thanked: 9 time

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi baohiep » T.Bảy 26/02/2011 7:31 am

Ồ! Đang đi dạo diễn đàn thì lại thấy đúng cái mình cần. Cảm ơn các bác.

nc_microsoft
Bài viết: 2
Ngày tham gia: T.Hai 28/12/2009 3:25 pm

Re: Cách lấy IP thực khi máy truy cập internet !!!

Gửi bàigửi bởi nc_microsoft » T.Hai 30/07/2012 1:36 pm

Em đang cần bài viết về chủ đề này. Em thấy có phần mềm Teamviewer rất hay. Anh có biết cách kết nối hai máy với nhau của phần mềm này như thế nào không? Em thử dùng cách của anh nhưng vẫn không kết nối được hai máy với nhau. Ngay cả khi hai máy dùng chung một Model mạng.
Em tìm trên mạng có bài viết trong diễn đàn của PCWord, làm thử cũng không được, test trên cùng một máy thì OK, trên hai máy khác nhau thì không được. Anh có mã nào đã test thử rồi thì se cho em nhé (pecon1308@gmail.com). Cảm ơn anh nhiều. Bài viết trên PCWord là:
Câu hỏi :
Tôi muốn viết chương trình kết nối 2 máy tính dùng VB6.0 sử dụng hỗ trợ của winsock vừa truyền webcam vừa truyền dữ liệu. Có thể dùng 2 winsock (một cái truyền webcam, một cái truyền nhận thông tin) được không?
Trả lời :
Khi viết ứng dụng mạng bằng VB 6.0, cách dễ dàng nhất là dùng điều khiển ActiveX của Microsoft có tên là Winsock. Thường 1 ứng dụng mạng gồm 2 module phần mềm: module client và module server. Điều khiển Winsock cũng có thể hoạt động ở 1 trong 2 chế độ: Winsock server hay Winsock client. Winsock server có thể giao tiếp với nhiều client đồng thời, còn Winsock client thì chỉ có thể giao tiếp với 1 server tại từng thời điểm. Tóm lại, nếu bạn đang dùng Winsock ở chế độ client để truyền dữ liệu đến server, bạn có thể tạo 2 hay nhiều điều khiển Winsock khác nhau, mỗi điều khiển Winsock sẽ truyền/nhận dữ liệu với 1 đối tác nào đó. Sau đây là qui trình xây dựng ứng dụng mạng nhỏ demo việc tạo Winsock và gửi/nhận dữ liệu cho nhau.

Qui trình xây dựng module Client:
1. Chạy VB 6.0, tạo Project "Standard EXE".
2. Chọn menu Project.Components để hiển thị cửa sổ Components, duyệt tìm và chọn mục "Microsoft Winsock Control 6.0" để "add" nó vào cửa sổ ToolBox của Project.
3. Thiết kế Form cho ứng dụng Client như sau:
Lưu ý đặt tên cho button là cmdConnect, Textbox của Client 1 là Text1, TextBox của Client 2 là Text2, 2 Winsock có tên lần lượt là ClientSock1 và ClientSock2.
4. Nhấn kép chuột vào button Connect để tạo thủ tục xử lý sự kiện nhấn chuột cho nó. Khi cửa sổ soạn code hiển thị, bạn hãy viết đoạn code VB sau đây:
'Thủ tục khởi tạo cho Form
Private Sub Form_Load()
'Để xác định máy chạy ứng dụng server, bạn có thể dùng địa chỉ IP (vd: "127.0.0.1") hay địa chỉ DNS (vd: “localhost”)
'thiết lập địa chỉ server cho Winsock1
ClientSock1.RemoteHost = "localhost"
ClientSock1.RemotePort = 1001
'thiết lập địa chỉ server cho Winsock2
ClientSock2.RemoteHost = "localhost"
ClientSock2.RemotePort = 1001
End Sub

'Thủ tục xử lý nhấn chuột trên button Connect
Private Sub cmdConnect_Click()
'nối kết ClientSock1 tới server
ClientSock1.Connect
'nối kết ClientSock2 tới server
ClientSock2.Connect
End Sub

'Thủ tục xử lý nhấn phím trên TextBox1
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
'nếu người dùng nhấn phím Enter thì gửi chuỗi nhập ra ClientSock1
If KeyCode = 13 Then
ClientSock1.SendData Text1.Text
End If
End Sub

'Thủ tục xử lý nhấn phím trên TextBox1
Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
'nếu người dùng nhấn phím Enter thì gửi chuỗi nhập ra ClientSock2
If KeyCode = 13 Then
ClientSock2.SendData Text2.Text
End If
End Sub
5. Chọn menu File.Make Project1.exe và nhập tên file thực thi mong muốn để VB dịch mã nguồn ra file thực thi của module Client.
Qui trình xây dựng module Server cũng tương tự:
1. Chạy VB 6.0, tạo Propject "Standard EXE".
2. Chọn menu Project.Components để hiển thị cửa sổ Components, duyệt tìm và chọn mục "Microsoft Winsock Control 6.0" để "add" nó vào cửa sổ ToolBox của Project.
3. Thiết kế Form cho ứng dụng Server như sau:
Lưu ý đặt tên cho ListBox1 là List1, ListBox2 là List2, Winsock có tên là sckServer.
4. Chọn điều khiển Winsock vừa vẽ để hiển thị cửa sổ thuộc tính của nó, duyệt tìm thuộc tính Index và nhập giá trị 0 cho nó.
5. Chọn menu View.Code để hiển thị cửa sổ soạn code và viết đoạn code VB sau đây:
'Khai báo biến cần dùng
Private intMax As Long
'Thủ tục khởi tạo cho Form
Private Sub Form_Load()
intMax = 0
'khởi tạo socket lắng nghe và phục vụ kết nối từ client
sckServer(0).LocalPort = 1001
sckServer(0).Listen
End Sub

'Thủ tục phục vụ yêu cầu kết nối từ Client
Private Sub sckServer_ConnectionRequest (Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
End If
End Sub

'Thủ tục nhận dữ liệu từ Client
Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
'nhận dữ liệu vào biến strData
sckServer(Index).GetData strData
'kiểm tra dữ liệu đến từ Client nào
Select Case Index
Case 1: 'từ Client 1
List1.AddItem strData
Case 2: 'từ Client 2
List2.AddItem strData
End Select
End Sub
6. Chọn menu File.Make Project1.exe và nhập tên file thực thi mong muốn để VB dịch mã nguồn ra file thực thi của module Server.

Sau khi đã xây dựng được 2 module client & server của ứng dụng mạng, bạn hãy chạy Server trước rồi chạy Client sau. Khi Form của Client hiển thị, bạn nhấn button Connect để client tạo 2 Winsock khác nhau và nối kết chúng đến cùng 1 server (đang lắng nghe ở địa chỉ localhost:1001). Sau đó, bạn thử nhập 1 chuỗi vào Text1 và nhấn Enter để nó gửi qua Server, Server sẽ nhận và hiển thị lên ListBox1, bạn thử nhập 1 chuỗi vào Text2 và nhấn Enter để nó gửi qua Server, Server sẽ nhận và hiển thị lên ListBox2...


Quay về “[VB] Hệ thống - Tập tin - Thư mục và Mạng”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách