Professional Documents
Culture Documents
Hướng Dẫn Chat Mạng Bằng Winsock Từ a-Z - Câu Lạc Bộ Visual Basic
Hướng Dẫn Chat Mạng Bằng Winsock Từ a-Z - Câu Lạc Bộ Visual Basic
t=1547
‹ Tài nguyên Visual Basic (VB6 - VBA - VBS) ‹ [VB] Bài viết hướng dẫn
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
1 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
tiếp đến bạn sẽ thấy icon của winsock , kéo nó vào form , thế là bạn đã có
thể dùng
Share on Facebook
Share on Twitter
Share on Google+
________________________________________________________________________
________________________
. . . . . . . . . . . . .. .
2 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
Winsock là một chuẩn được triển khai bởi Microsoft dựa trên một tập các thủ
tục truyền dữ liệu trên TCP/IP. Các thủ tục này nằm trong các thư viện liên
kết động (DLL) và chạy trên Windows.
Trong bài này chúng tôi sẽ giới thiệu với bạn cách dùng Winsock trong môi
trường client/server. Chúng ta sẽ tạo ra hai chương trình: một ở client và
một ở server, hai chương trình này sẽ tương tác với nhau để truyền dữ liệu
qua lại. Client gởi yêu cầu lên server, Server sẽ lấy dữ liệu từ Database và
trả dữ liệu về cho Client. Giả sử như Database chứa Mã hàng hoá và giá
tương ứng. Trên những ứng dụng thực tế thì Database có thể được cài trên
một máy khác với máy chạy Application server.
Trước hết chúng ta cần hiểu qua khái niệm về port. Một port là một vùng nhớ
được xác định khi hai máy tính liên lạc với nhau qua TCP/IP. Các ứng dụng
dùng một chỉ số port để xác định ứng dụng đối với các máy tính khác. Cả
máy gởi lẫn máy nhận đều dùng port này để trao đổi dữ liệu.
Có một vài port được quy định dành sẵn cho các ứng dụng phổ biến như:
FTP : 20, 21
Gopher : 70
SMTP : 25
POP3 : 110
Telnet : 23
Finger :79
Local : loops/callbacks 0
Sử dụng Winsock
Winsock dựa trên giao thức TCP/IP và mô hình ISO/OSI. TCP/IP là một giao
thức truyền thông chuẩn, trong đó xác định các phương thức đóng gói dữ
3 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
liệu cho phép chuyển vận dữ liệu giữa các thiết bị trên môi trướng mạng
không đồng nhất. TCP khởi tạo kết nối cho việc chuyển vận dữ liệu và IP
định nghĩa phương thức truyền các gói dữ liệu.
Thông qua các đối tượng Winsock của Microsoft việc sử dụng TCP/IP trở nên
dễ dàng hơn. Microsoft đóng gói các thủ tục Winsock và NETAPI trong các gói
mà bạn có thể dễ dàng sử dụng trong các ứng dụng Visual basic của mình.
Lớp Transport chịu trách nhiệm cung cấp cho lớp Application những phiên
(session) và gói dữ liệu.Giao thức cốt lõi của lớp Transport là TCP và UDP.
Winsock control hỗ trợ 2 cách:
+ sckTCPProtocol
+ sckUDPProtocol
Winsock cung cấp khả năng cho bạn tạo Client & Server sử dụng chung một
control.Chức năng đôi. Chức năng kép này được định rõ thông qua cài đặt
thuộc tính trong ứng dụng bạn xây dựng. Winsock control sử dụng một số
các thuộc tính giống nhau, cho dù bạn tạo Client hay Server.Có một số thuộc
tính quang trọng sau dây:
BytesReceived Property
Thuộc tính sẽ trả về số byte hiện thời trong buffer nhận.Đây là tính chất
read-only và không có giá trị trong thời gian thiết kế.Giá trị trả về là một số
long interger
LocalHostName Property
Thuộc tính này sẽ trả về tên của máy local.Đây là thuộc tính read-only và
không có giá trị ở thời gian thiết kế.Giá trị trả về là một chuỗi.
LocalIP Property
Thuộc tính này sẽ trả về địa chỉ IP của máy localin một dạng chuỗi, ví dụ
11.0.0.127. Đây là thuộc tính chỉ đọc và không có giá trị tại thời gian thiết
kế.
LocalPort Property
Thuộc tính này sẽ trả về hoặc đặt port cục bộ.Thuộc tính này bao gồm cả 2
thuộc tính “read from” và “written to” và có giá trị cả trong thòi gian thiết kế
và runtime .Giá trị trả về là một số long interger
Protocol Property
Thuộc tính này sẽ trả về hoặc đặt giao thức cả TCP và UDP đựơc sử dụng bởi
4 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
Winsock
RemoteHost Property
Thuộc tính này sẽ trả về hoặc đặt tên máy ở xa (remote host) .Thuộc tính
này bao gồm cả 2 thuộc tính “read from” và “written to” và có giá trị cả
trong thòi gian thiết kế và runtime .Giá trị trả về là một chuỗi và có thể được
xác định như địa chỉ IP hoặc tên DNS
RemotePort Property
Thuộc tính này sẽ trả về hoặc đặt port của máy ở xa(remote port number).
State Property
Thuộc tính này trả về tình trạng của điều khiển một danh sách liệt kê.Đây là
thuộc tính chỉ đọc và không có giá trị tại thời gian thiết kế.
Accept Method
Cho phép yêu cầu kết nối từ hệ thống client. Để phương thức được dùng,
điều khiển cần được set ở chế độ listening
Close Method
Cắt một kết nối a kết nối TCP từ client hoặc server .
GetData Method
Nhận khối dữ liệu hiện tại từ buffer và lưu trữ giá trị trong biến kiểu variant.
PeekData Method
Có tác vụ giống như GetData.Mặc dù vậy nó không xoá dự liệu từ hàng đợi.
Listen Method
Được cài đạt trên ứng dụng Server cho phép server chờ đợi một yêu cầu kết
nối TCP từ client .
SendData Method
Connect Method
5 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
Tạo client
1. Option Explicit
2.
3.
4. Private Sub cmdClose_Click()
5.
6. Winsock1.Close
7. shpGo.Visible = False
8. shpWait.Visible = False
9. shpError.Visible = True
10.
11. End Sub
12.
13. Private Sub cmdConnect_Click()
14.
15. Winsock1.RemoteHost = 11.0.0.1 'Đổi thành IP của máy
bạn
16. Winsock1.RemotePort = 1007
17. Winsock1.Connect
18. shpGo.Visible = True
19. txtItem.SetFocus
20.
21. End Sub
22.
23.
24. Private Sub cmdSend_Click()
25.
26. If Winsock1.State = sckConnected Then
27. Winsock1.SendData txtItem.Text
28. shpGo.Visible = True
29. Label3.Caption = " Đang gửi dữ liệu "
30. Else
31. shpGo.Visible = False
32. shpWait.Visible = False
33. shpError.Visible = True
34. Label3.Caption = " Hiện tại không thể kết nối được tới
host "
35. End If
36.
37. End Sub
38.
39.
40. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
41.
42. Dim sData As String
43.
44. Winsock1.GetData sData, vbString
45. Label1.Caption = sData
46. txtPrice.Text = sData
6 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
Tạo Server
Server được thiết kế để chấp nhận số được gửi từ client và tìm giá tương ứng
với số đó trong database.Server gửi thông tin về client.Có một tập tin tên
“path.txt” trong thư mục gọi là “Server” và lưu dường dẫn của database
trong file đó.Kết nối đến database dược thực thi trong sự kiện DataArrival
của Winsock.Đoạn code sau dể mở database và tìm record đầu tiên của giá
trị in sItemData.Khi record được tìm thấy, giá trị của trường price cà được
gửi về client.
1.
2.
3. Option Explicit
4. Dim iSockets As Integer
5. Dim sServerMsg As String
6. Dim sRequestID As String
7.
8. Private Sub Form_Load()
9.
10. Form1.Show
11. lblHostID.Caption = Socket(0).LocalHostName
12. lblAddress.Caption = Socket(0).LocalIP
13. Socket(0).LocalPort = 1007
14. sServerMsg = "Listening to port: " & Socket(0).LocalPort
15. List1.AddItem (sServerMsg)
16. Socket(0).Listen
17. End Sub
7 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
18.
19. Private Sub socket_Close(Index As Integer)
20. sServerMsg = "Connection closed: " &
Socket(Index).RemoteHostIP
21. List1.AddItem (sServerMsg)
22. Socket(Index).Close
23. Unload Socket(Index)
24. iSockets = iSockets - 1
25. lblConnections.Caption = iSockets
26.
27. End Sub
28.
29. Private Sub socket_ConnectionRequest(Index As Integer, ByVal
requestID As Long)
30. sServerMsg = "Connection request id " & requestID & " from " &
Socket(Index).RemoteHostIP
31. If Index = 0 Then
32. List1.AddItem (sServerMsg)
33. sRequestID = requestID
34. iSockets = iSockets + 1
35. lblConnections.Caption = iSockets
36. Load Socket(iSockets)
37. Socket(iSockets).LocalPort = 1007
38. Socket(iSockets).Accept requestID
39. End If
40.
41. End Sub
42.
43. Private Sub socket_DataArrival(Index As Integer, ByVal bytesTotal
As Long)
44.
45. Dim sItemData As String
46. Dim strData As String
47. Dim strOutData As String
48. Dim strConnect As String
49.
50.
51. ' get data from client
52. Socket(Index).GetData sItemData, vbString
53. sServerMsg = "Received: " & sItemData & " from " &
Socket(Index).RemoteHostIP & "(" & sRequestID & ")"
54. List1.AddItem (sServerMsg)
55.
56. 'strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=G:\Prices.mdb;Persist Security Info=False"
57. Dim strPath As String
58.
59. 'Change the database path in the text file
60.
61. Dim fso As New FileSystemObject, txtfile, _
62. fil1 As File, ts As TextStream
63.
64. Set fil1 = fso.GetFile("path.txt")
65. ' Read the contents of the file.
66. Set ts = fil1.OpenAsTextStream(ForReading)
67. strPath = ts.ReadLine
68. ts.Close
69. Set fso = Nothing
70.
71. strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
72. "Persist Security Info=False;Data Source=" & strPath & _
73. "; Mode=Read|Write"
74.
8 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
4.Nhập giá trị từ 1 đến 6 và bấm nút Lookup.Giá tương ứng sẽ hiển thị ở
trường giá
1- http://www.15seconds.com/issue/010820.htm
2- http://www.vbip.com/winsock/winsock_control.asp
3- http://msdn.microsoft.com/library/d...sockcontrol.asp
4- http://www.freevbcode.com/ShowCode.asp?ID=3025
5- http://www.geocities.com/alpha_prod.../vb_winsock.htm
6- http://www.freevbcode.com/ShowCode.asp?ID=3025
________________________________________________________________________
________________________
. . . . . . . . . . . . .. .
Đa số chúng ta khi làm được phần mềm làm bằng winsock , chỉ chạy được
trong mạng Lan , gửi cho thằng bạn thì ko chạy được , tại sao vậy ? do
bạn chưa forward port .ĐỊnh nghĩa port forward như sau
9 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
ngoài có thể truy cập vào clients/terminals/nodes trong mạng LAN bằng cách
sử dụng cái port đó từ bên ngoài thông qua cái Router/Modem/Firewall đã
mở chức năng NAT.
Như vậy, các máy tính từ xa (máy vòng quanh thế giới trên internet ấy) sẽ
sử dụng Port forwarding để kết nối với một máy tính khác trong mạng LAN
và đây cũng chính là cách mà các chương trình Torrent sử dụng để chia sẻ
file giữa 2 máy tính với nhau nên ta còn gọi là peer to peer (PP) sharing đó.
Ok hiểu , giờ hướng dẫn , ĐỐi với modem nhà em trước cho dễ
+ Bật trình duyệt lên ,nhập địa chỉ 192.168.1.1 .Login với name và pass là
Admin .
Hình ảnh
+ Vào phần Advanced ,chọn Virtual Server , chọn user , chọn add:
10 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
* Port End - Nhập cổng để nghe , start bắt đầu từ đâu cũng được nhưng
đừng có trùng . Ví dụ : 3000
* Port Map -Bỏ trống hoặc điền giống như port start và port end Ví dụ port
_Sau đó chọn Apply .Nếu thành công sẽ hiện ra như sau :
11 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
ok
giờ bạn có thể send cho bạn mình điền vảo phần client : IP vừa tìm được : Ví
dụ Ip của giongto35 là 123.19.54.104
POrt từ 2000 -> 3000 , chọn 1 số thật đặc biệt như 2135 .
Nếu mà bạn thấy bên kia connect được là bạn đã thành công .
CHú Ý : trên 1 máy ko thể test được , vì vậy phải nhờ bạn , nếu ko có bạn thì
Cách 2 : bạn cho cái server luôn luôn listen tại cổng nào đó (ví dụ cổng
2135)
vào trang http://anonymouse.org/anonwww.html
Điền vào cái text box cấu trúc như sau
http://IP:port
ví dụ : http://123.19.54.104:2135
nếu trong phần mềm nhận được
Các modem khác các bạn có thể xem các bài hướng dẫn cho game startcraft
tại http://starcraftvn.net/svn/showthread.php?t=263 nhưng điều chỉnh lại
port start và port end của chương trình bản
nếu muốn chi tiết hơn thì bạn xem tiếng anh tại trang :
http://www.portforward.com/english/rout ... rindex.htm
tất cả các modem
________________________________________________________________________
________________________
. . . . . . . . . . . . .. .
12 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
A forum post should be like a skirt. Long enough to cover the subject material, but short
enough to keep things interesting.
Bài viết: 42
Ngày tham gia: T.Bảy
11/08/2012 12:50 pm
Đến từ: Bình Thuận
Has thanked: 4 time
Been thanked: 2 time
Liên hệ:
Xem bài viết cách đây: Tất cả bài viết Sắp xếp theo Ngày gửi Tăng dần Chuyển
13 of 14 04/07/2019, 21:22
Hướng dẫn chat mạng bằng winsock từ A-Z - Câu lạc bộ Visual Basic http://caulacbovb.com/forum/viewtopic.php?t=1547
Đang xem chuyên mục này: Không có thành viên nào trực tuyến. và 0 khách
Trang chủ ‹ Diễn đàn Liên hệ Ban điều hành Xóa hết cookie • Múi giờ UTC+07:00
14 of 14 04/07/2019, 21:22