thucgia > 12-04-15, 02:06 PM
Option Compare Database
Dim ten As String
Public WithEvents ws_server As MSWinsockLib.Winsock ' Vì không cho lôi thả nên phải sử dụng cái này
Public WithEvents ws_anser As MSWinsockLib.Winsock
Dim remoteHostIP As String
Dim remotePort As String
Private Sub btn_login_Click()
ten = InputBox("Vui long nhap ten", "What you name ?", "noname")
If ten = "" Then
ten = "noname"
End If
DoCmd.OpenForm "frm_client"
Me.btn_login.Enabled = False
End Sub
Private Sub Form_Load()
Set ws_server = New MSWinsockLib.Winsock
ws_server.Protocol = sckUDPProtocol
ws_server.Bind 1001 'server đang lắng nghe ở cổng số 1001, bạn có thể đặt khác tùy bạn
Set ws_anser = New MSWinsockLib.Winsock
ws_anser.Protocol = sckUDPProtocol
End Sub
Private Sub ws_server_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
ws_server.GetData msg
Select Case msg
Case "in":
remoteHostIP = ws_server.remoteHostIP
remotePort = ws_server.remotePort
Me.txt_output_server = "[" & ten & "]" & " login" & vbCrLf & _
Me.txt_output_server
ws_anser.RemoteHost = remoteHostIP 'Chỉnh súng bắn ngược lại client
ws_anser.remotePort = remotePort
ws_anser.SendData "[" & ten & "]: login >"
Case "out":
btn_login.Enabled = True
Me.txt_output_server = "[" & ten & "]" & " logout" & vbCrLf & _
Me.txt_output_server
Case Else:
Me.txt_output_server = "[" & ten & "] :" & msg & vbCrLf & _
Me.txt_output_server
ws_anser.RemoteHost = remoteHostIP
ws_anser.remotePort = remotePort
ws_anser.SendData "[" & ten & "]: " & msg
End Select
End Sub
Option Compare Database
Public WithEvents ws_client As MSWinsockLib.Winsock
Private Sub btn_send_Click()
If Not IsNull(txt_msg) Then
ws_client.RemoteHost = "localhost" 'ở đây để demo nên mình sử dụng localhost
ws_client.remotePort = 1001 ' Xia khẩu súng vào cổng 1001 của server
ws_client.SendData txt_msg ' Bóp cò thôi...
End If
End Sub
Private Sub Form_Load()
Set ws_client = New MSWinsockLib.Winsock
ws_client.Protocol = sckUDPProtocol
ws_client.RemoteHost = "localhost"
ws_client.remotePort = 1001
ws_client.SendData "in"
End Sub
Private Sub Form_Unload(Cancel As Integer)
ws_client.RemoteHost = "localhost"
ws_client.remotePort = 1001
ws_client.SendData "out"
End Sub
Private Sub ws_client_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
ws_client.GetData msg
Me.txt_output = msg & vbCrLf & _
Me.txt_output
End Sub
maidinhdan > 12-04-15, 02:50 PM
thucgia > 12-04-15, 04:32 PM
(12-04-15, 02:50 PM)maidinhdan Đã viết: Code hay quá, hok biết có ngại post demo lên không nửa. Để mọi người thưởng thức.hi, gửi hết trơn rồi đó bạn, Chỉ có 2 form thôi, dựng lên dễ mà, tại mình viết trên access 2010,
maidinhdan > 12-04-15, 08:32 PM
(12-04-15, 04:32 PM)thucgia Đã viết:(12-04-15, 02:50 PM)maidinhdan Đã viết: Code hay quá, hok biết có ngại post demo lên không nửa. Để mọi người thưởng thức.hi, gửi hết trơn rồi đó bạn, Chỉ có 2 form thôi, dựng lên dễ mà, tại mình viết trên access 2010,
Xem thử đi, rồi bàn tiếp, mình còn đang suy nghĩ làm sao đặt cái đại liên từ server bắn một loạt vào các client mới đúng chuẩn.
Nghiên cứu tí đi rồi còn thảo luận nữa nhé.
thucgia > 12-04-15, 09:11 PM
(12-04-15, 08:32 PM)maidinhdan Đã viết:(12-04-15, 04:32 PM)thucgia Đã viết:(12-04-15, 02:50 PM)maidinhdan Đã viết: Code hay quá, hok biết có ngại post demo lên không nửa. Để mọi người thưởng thức.hi, gửi hết trơn rồi đó bạn, Chỉ có 2 form thôi, dựng lên dễ mà, tại mình viết trên access 2010,
Xem thử đi, rồi bàn tiếp, mình còn đang suy nghĩ làm sao đặt cái đại liên từ server bắn một loạt vào các client mới đúng chuẩn.
Nghiên cứu tí đi rồi còn thảo luận nữa nhé.
anh nghiên cứu TCP chưa...mỗi người 1 cái coi cái nào hay hơn.
Vả lại anh làm rồi, làm biến soạn form text box lắm....Và còn nhiều vấn đề trên diễn đàn cần giải quyết nửa...Ngày nào cũng xem code...cũng gõ riết cái cổ tay phải đau suốt cả tháng rồi...
maidinhdan > 12-04-15, 10:11 PM
thucgia > 13-04-15, 01:53 PM
(12-04-15, 10:11 PM)maidinhdan Đã viết: Chắc anh gửi Demo Acc 2010 lên đi, để em cài ngâm cứu cùng anh...Khi conver sang 2003 Open là nó Bug ngay chả làm gì được cả.
Hay xin thêm ý kiến anh là:
- anh làm trên 2010
- em làm trên 2003.
Ý hay thế nào?
Option Compare Database
Public WithEvents ws_server As MSWinsockLib.Winsock
Public WithEvents ws_anser As MSWinsockLib.Winsock
Dim ten_client As String
Dim host_client As String
Dim port_client As String
Public Sub MySendData(txt As String)
ws_anser.RemoteHost = host_client
ws_anser.remotePort = port_client
ws_anser.SendData txt
End Sub
Private Sub btn_login_Click()
ten_client = InputBox("Vui long nhap ten", "What you name ?", "noname")
If ten_client = "" Then
ten_client = "noname"
End If
DoCmd.OpenForm "frm_client"
Me.btn_login.Enabled = False
End Sub
Private Sub Form_Load()
Set ws_server = New MSWinsockLib.Winsock
ws_server.Protocol = sckUDPProtocol
ws_server.Bind 1001
Set ws_anser = New MSWinsockLib.Winsock
ws_anser.Protocol = sckUDPProtocol
End Sub
Private Sub ws_server_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
ws_server.GetData msg
Select Case msg
Case "in":
host_client = ws_server.remoteHostIP
port_client = ws_server.remotePort
Me.txt_output_server = "[" & ten_client & "]" & " login" & vbCrLf & _
Me.txt_output_server
Call MySendData("[" & ten_client & "]: login >")
Case "out":
btn_login.Enabled = True
Me.txt_output_server = "[" & ten_client & "]" & " logout" & vbCrLf & _
Me.txt_output_server
Case Else:
Me.txt_output_server = "[" & ten_client & "] :" & msg & vbCrLf & _
Me.txt_output_server
Call MySendData("[" & ten_client & "]: " & msg)
End Select
End Sub
Option Compare Database
Public WithEvents ws_client As MSWinsockLib.Winsock
Const host_server As String = "localhost" 'sau này điền vào server name là xong, khỏi sửa nhiều
Const port_server As String = "1001"
Public Sub MySendData(txt As String)
ws_client.RemoteHost = host_server
ws_client.remotePort = port_server
ws_client.SendData txt
End Sub
Private Sub btn_send_Click()
If Not IsNull(txt_msg) Then
Call MySendData(txt_msg)
End If
End Sub
Private Sub Form_Load()
Set ws_client = New MSWinsockLib.Winsock
ws_client.Protocol = sckUDPProtocol
Call MySendData("in")
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo sub_error
Call MySendData("out")
sub_error:
Resume Next
End Sub
Private Sub ws_client_DataArrival(ByVal bytesTotal As Long)
On Error GoTo sub_error
Dim msg As String
ws_client.GetData msg
Me.txt_output = msg & vbCrLf & _
Me.txt_output
sub_error:
Resume Next
End Sub
maidinhdan > 13-04-15, 04:05 PM
thucgia > 13-04-15, 09:56 PM
(13-04-15, 04:05 PM)maidinhdan Đã viết: Để tối nay Check nó xem sao, Coi cần thêm gì nửa hok. chứ tối hôm qua đọc tài liệu nước ngoài nói về Winsock ( mãi đọc mà gần sáng hok hay) sáng đi làm trễ gần 9h mới vào cơ quan)
Cảm ơn anh thucgia trước nhé....
Option Compare Database
Public WithEvents ws_server As MSWinsockLib.Winsock
Public WithEvents ws_anser As MSWinsockLib.Winsock
Dim l As clientDao
Dim ten_client As String
Dim host_client As String
Dim port_client As String
Public Sub MySendData(txt As String)
Dim i As Integer
For i = 1 To l.SoDong
ws_anser.RemoteHost = l.GetClient(i).host_client
ws_anser.remotePort = l.GetClient(i).port_client
ws_anser.SendData txt
Next i
End Sub
Private Sub btn_login_Click()
ten_client = InputBox("Vui long nhap ten", "What you name ?", "noname")
If ten_client = "" Then
ten_client = "noname"
End If
DoCmd.OpenForm "frm_client"
End Sub
Private Sub btn_login2_Click()
ten_client = InputBox("Vui long nhap ten", "What you name ?", "noname")
If ten_client = "" Then
ten_client = "noname"
End If
DoCmd.OpenForm "frm_client2"
End Sub
Private Sub Form_Load()
Set ws_server = New MSWinsockLib.Winsock
ws_server.Protocol = sckUDPProtocol
ws_server.Bind 1001
Set ws_anser = New MSWinsockLib.Winsock
ws_anser.Protocol = sckUDPProtocol
Set l = New clientDao
End Sub
Private Sub ws_server_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
ws_server.GetData msg
Select Case msg
Case "in":
host_client = ws_server.remoteHostIP
port_client = ws_server.remotePort
Me.txt_output_server = "[" & ten_client & "]" & " login" & vbCrLf & _
Me.txt_output_server
Call l.Them(ten_client, host_client, port_client)
Call MySendData("[" & ten_client & "]: login >")
Case "out":
host_client = ws_server.remoteHostIP
port_client = ws_server.remotePort
ten_client = l.Get_ten_client(host_client, port_client)
Me.txt_output_server = "[" & ten_client & "]" & " logout" & vbCrLf & _
Me.txt_output_server
Call l.Xoa(host_client, port_client)
Case Else:
host_client = ws_server.remoteHostIP
port_client = ws_server.remotePort
ten_client = l.Get_ten_client(host_client, port_client)
Me.txt_output_server = "[" & ten_client & "] :" & msg & vbCrLf & _
Me.txt_output_server
Call MySendData("[" & ten_client & "]: " & msg)
End Select
End Sub
Option Compare Database
Public WithEvents ws_client As MSWinsockLib.Winsock
Const host_server As String = "localhost"
Const port_server As String = "1001"
Public Sub MySendData(txt As String)
ws_client.RemoteHost = host_server
ws_client.remotePort = port_server
ws_client.SendData txt
End Sub
Private Sub btn_send_Click()
If Not IsNull(txt_msg) Then
Call MySendData(txt_msg)
End If
End Sub
Private Sub Form_Load()
Set ws_client = New MSWinsockLib.Winsock
ws_client.Protocol = sckUDPProtocol
Call MySendData("in")
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo sub_error
Call MySendData("out")
sub_error:
Resume Next
End Sub
Private Sub ws_client_DataArrival(ByVal bytesTotal As Long)
On Error GoTo sub_error
Dim msg As String
ws_client.GetData msg
Me.txt_output = msg & vbCrLf & _
Me.txt_output
sub_error:
Resume Next
End Sub
Option Compare Database
Public ten_client As String
Public host_client As String
Public port_client As String
Public Sub Class_Initialize()
ten_client = ""
host_client = ""
port_client = ""
End Sub
Option Compare Database
Dim list As Collection
Private Sub Class_Initialize()
Set list = New Collection
End Sub
Private Sub Class_Terminate()
Set list = Nothing
End Sub
Public Function SoDong() As Long
SoDong = list.Count
End Function
Public Sub Them(t As String, h As String, p As String)
Dim c As clientDto
Set c = New clientDto
c.ten_client = t
c.host_client = h
c.port_client = p
list.Add c
End Sub
Public Sub Xoa(host_client As String, port_client As String)
Dim j As Integer
j = 1
For i = 1 To list.Count
If (StrComp(list.Item(j).host_client, host_client, vbTextCompare) = 0 And StrComp(list.Item(j).port_client, port_client, vbTextCompare) = 0) Then
list.Remove (j)
Else
j = j + 1
End If
Next i
End Sub
Public Function Get_ten_client(host_client As String, port_client As String) As String
Dim i As Integer
Dim kq As String
kq = ""
For i = 1 To list.Count
If (StrComp(list.Item(i).host_client, host_client, vbTextCompare) = 0 And StrComp(list.Item(i).port_client, port_client, vbTextCompare) = 0) Then
kq = list.Item(i).ten_client
End If
Next i
Get_ten_client = kq
End Function
Public Function GetClient(i As Integer) As clientDto
Set GetClient = list.Item(i)
End Function
kieu manh > 07-02-19, 04:39 PM