السلام عليكم ورحمه الله وبركاته
أرجو من لهم الخبرة في الفيجول بيسك دوت نت 2005 مساعدتي في شرح الاكواد التي سأ درجها علماً بأني أحتاج المساعدة منذ فترة طويلة وأملي بالله فيكم بارك الرحمن فيكم ياأهل الخبرة وزادكم من فضله :)
Imports System.Text
Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Imports System.Threading
Imports System.Data
Imports System.Data.OleDb
Public Class frmServer
Private SvrStpd As Boolean
Private ServerSckt As Socket
Private ServerClientSckt As Socket
Private ASCII As New ASCIIEncoding
Private Delegate Sub NoPrmdelegatet()
Private Delegate Sub nStrdelegatet(ByVal Data As String)
Const portNumber As Integer = 1234
Public Delegate Sub Funmsg(ByVal t As String)
' Private nudPort As Integer = 1234
Private IPAddr As String = "127.0.0.1"
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Sub frmServer_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
' SvrStpd = True
Call EndComm()
' Me.Hide()
End Sub
'create Begin Receive to server socket
Private Sub CallBack(ByVal ar As IAsyncResult)
Dim delegate1 As New NoPrmdelegatet(AddressOf Connected)
Dim delegate2 As New NoPrmdelegatet(AddressOf DisConnected)
' Me.Invoke(delegate1)
' Try
' server stopped , disconnect
If SvrStpd = True Then
Me.Invoke(delegate2)
Exit Sub
End If
ServerClientSckt = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
ServerClientSckt = ServerSckt.EndAccept(ar)
SendData("cmdlogin$$")
Me.Invoke(delegate1)
Dim bytes(500000) As Byte
ServerClientSckt.BeginReceive(bytes, 0, bytes.Length, SocketFlags.None, AddressOf Receive, bytes)
' Catch Exp As Exception
'Exit Sub
' End Try
End Sub
'this function to recive data and turn it Reader function
Private Sub Receive(ByVal ar As IAsyncResult)
Dim delegate1 As New NoPrmdelegatet(AddressOf DisConnected)
Dim bytes(500000) As Byte
' Try
'recieve text from client
bytes = CType(ar.AsyncState, Byte())
'Dim bytes() As Byte = CType(ar.AsyncState, Byte())
Dim numbytes As Int32 = ServerClientSckt.EndReceive(ar)
If numbytes = 0 Then
ServerClientSckt.Shutdown(SocketShutdown.Both)
ServerClientSckt.Close()
Me.Invoke(delegate1)
Else
Dim Recv As String = ASCII.GetString(bytes, 0, numbytes)
'Clear buffer
Array.Clear(bytes, 0, bytes.Length)
Dim delegate2 As New nStrdelegatet(AddressOf Reader)
Dim args() As Object = {Recv}
Me.Invoke(delegate2, args)
'Receiving again
ServerClientSckt.BeginReceive(bytes, 0, bytes.Length, SocketFlags.None, AddressOf Receive, bytes)
End If
' Catch Exp As Exception
'Exit Sub
' End Try
End Sub
'send data
Public Sub SendData(ByVal data As String)
Dim bytes(500000) As Byte
bytes = ASCII.GetBytes(data)
ServerClientSckt.Send(bytes) 'Send the data to the client
With frmVGR.txtROnline
.SelectionStart = .Text.Length
.SelectedText = Me.Username.Text & "->" & data & vbCrLf
End With
End Sub
'this function to display message on chatting that (sesrver/usesr) is connected
Private Sub Connected()
Me.Hide()
frmVGR.Text = Application.ProductName & " Server- Connected"
frmVGR.txtROnline.Text += "Connected at " & Now.ToString & "." & vbCrLf
frmVGR.Show()
End Sub
'this function to display message on chatting that (sesrver/usesr) is DisConnected
Private Sub DisConnected()
If SvrStpd = True Then
SvrStpd = False
Exit Sub
End If
frmVGR.Text = Application.ProductName & "Server- Not Connected"
If SvrStpd = False Then
frmVGR.txtROnline.Text += "Disconnected at " & Now.ToString & "." & vbCrLf
End If
End Sub
'close socket
Public Sub EndComm()
ServerClientSckt.Close()
ServerSckt.Close()
End Sub
'this function is datat parser
Sub Reader(ByVal Data As String)
Dim command As String
Dim VUsername, VPassword, grname As String
Dim ln As Integer
'Dim smsdata = Data
ln = InStr(1, Data, "$$")
command = Strings.Left(Data, ln - 1)
Data = Mid(Data, ln + 2, Len(Data))
If Trim(command) = "sndloging" Then
ln = InStr(1, Data, "|")
VUsername = Strings.Left(Data, ln - 1)
VPassword = Mid(Data, ln + 1, Len(Data))
Call Funlogin(VUsername, VPassword)
ElseIf Trim(command) = "sndGrouplst" Then
Call FunGroup()
ElseIf Trim(command) = "sndUserLst" Then
ln = InStr(1, Data, "|")
VUsername = Strings.Left(Data, ln - 1)
grname = Mid(Data, ln + 1, Len(Data))
Call Funsession(grname, VUsername)
Call FunUser(grname)
ElseIf Trim(command) = "sndLeave" Then
Call leavsession(Data)
End If
End Sub
Private Sub FunmsgN(ByVal data As String)
' frmVGR.txtROnline.Text += data & vbCrLf
' frmVGR.Show()
End Sub
'this function to verify user name and Password to user
Private Sub Funlogin(ByVal VUsername As String, ByVal VPassword As String)
Dim dbconn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "VGADB.mdb")
dbconn.Open()
Dim dbcomm As New OleDbCommand("select * from userstbl where username ='" & VUsername & "' and Password='" & VPassword & "' ", dbconn)
If dbcomm.Connection.State = ConnectionState.Closed Then
dbcomm.Connection.Open()
End If
Dim dbReader As OleDbDataReader = dbcomm.ExecuteReader()
If dbReader.Read = True Then
SendData("Welcome$$")
Else
SendData("Recmdlogin$$")
End If
dbReader = Nothing
dbcomm.Connection.Close()
dbconn.Close()
End Sub
'get on group list of users on send it to user
Private Sub FunGroup()
Dim arrGroupLst As String = ""
Dim dbconn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "VGADB.mdb")
dbconn.Open()
Dim dbcomm As New OleDbCommand("select * from grouptbl", dbconn)
Dim dbReader As OleDbDataReader = dbcomm.ExecuteReader()
If Not dbReader Is Nothing Then
frmGroup.Lstgroup.Items.Clear()
' While dbReader.Read
'frmGroup.Lstgroup.Items.Add(dbReader("grname"))
' Dim ObjData As String = dbReader("grname")
'Dim params() As Object = {ObjData}
'Me.Invoke(New Funmsg(AddressOf FunGroupN), params)
While dbReader.Read
Dim gn As String = dbReader("grname")
arrGroupLst += gn & "|"
End While
arrGroupLst = "sndGroupLst$$" + arrGroupLst
SendData(arrGroupLst)
' End While
End If
dbReader = Nothing
dbcomm.Connection.Close()
dbconn.Close()
End Sub
Private Sub FunGroupN(ByVal data As String)
frmGroup.Lstgroup.Items.Add(data)
End Sub
'this function is temp to record the users which are connected by server
Private Sub Funsession(ByVal grname As String, ByVal UserName As String)
'MsgBox(grname + UserName)
Dim dbcnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "VGADB.mdb")
dbcnn.Open()
Dim cmd = New OleDbCommand("select * from sessiontbl where [username]='" & UserName & "' ", dbcnn)
cmd.Connection.Close()
If cmd.Connection.State = Data.ConnectionState.Closed Then
cmd.Connection.Open()
End If
Dim rd As OleDbDataReader = cmd.ExecuteReader()
If rd.Read Then
Dim cmd2 = New OleDbCommand("delete from sessiontbl where [username]='" & UserName & "' ", dbcnn)
cmd2.Connection.Close()
If cmd2.Connection.State = Data.ConnectionState.Closed Then
cmd2.Connection.Open()
End If
cmd2.ExecuteNonQuery()
cmd2.Connection.Close()
End If
cmd.Connection.Close()
rd = Nothing
'===============================
Dim cmd1 = New OleDbCommand("INSERT INTO sessiontbl(username,grname)" & _
" VALUES('" & UserName & "','" & grname & "')", dbcnn)
If cmd1.Connection.State = Data.ConnectionState.Closed Then
cmd1.Connection.Open()
End If
cmd1.ExecuteNonQuery()
cmd1.Connection.Close()
dbcnn.Close()
End Sub
'this function to remove the users which are leave from chating
Private Sub leavsession(ByVal username As String)
Dim dbcnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "VGADB.mdb")
dbcnn.Open()
Dim cmd = New OleDbCommand("select * from sessiontbl where [username]='" & username & "' ", dbcnn)
cmd.Connection.Close()
If cmd.Connection.State = Data.ConnectionState.Closed Then
cmd.Connection.Open()
End If
Dim rd As OleDbDataReader = cmd.ExecuteReader()
If rd.Read Then
Dim cmd2 = New OleDbCommand("delete from sessiontbl where [username]='" & username & "' ", dbcnn)
cmd2.Connection.Close()
If cmd2.Connection.State = Data.ConnectionState.Closed Then
cmd2.Connection.Open()
End If
cmd2.ExecuteNonQuery()
cmd2.Connection.Close()
End If
cmd.Connection.Close()
rd = Nothing
dbcnn.Close()
'===============================
SendData("cmdclose$$")
End Sub
'get on users list of user and send to it
Private Sub FunUser(ByVal grname As String)
Dim dbconn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "VGADB.mdb")
dbconn.Open()
Dim arrUserLst As String = ""
Dim dbcomm As New OleDbCommand("select * from sessiontbl where [grname] ='" & grname & "' ", dbconn)
Dim dbReader As OleDbDataReader = dbcomm.ExecuteReader()
If Not dbReader Is Nothing Then
While dbReader.Read
Dim gn As String = dbReader("username")
arrUserLst += gn & "|"
End While
arrUserLst = "sndUserLst$$" + grname + ":" + arrUserLst
SendData(arrUserLst)
End If
dbReader = Nothing
dbcomm.Connection.Close()
dbconn.Close()
End Sub
Private Sub FunUserN(ByVal data As String)
frmVGR.Lstuser.Items.Add(data)
End Sub
Private Function GetIPAddr() As String
Dim strHostName As String
Dim strIPAddress As String
strHostName = Dns.GetHostName()
strIPAddress = Dns.GetHostEntry(strHostName).AddressList(0).ToString()
GetIPAddr = strIPAddress
End Function
'this button to craete listner of server socket
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
Dim Addr As IPAddress = Nothing
'=============
Dim dbconn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "VGADB.mdb")
dbconn.Open()
Dim dbcomm As New OleDbCommand("select * from userstbl where username ='" & Username.Text & "' and Password='" & Password.Text & "' ", dbconn)
Dim dbReader As OleDbDataReader = dbcomm.ExecuteReader()
If dbReader.Read = False Then
MsgBox("username Or Password is error,Please Try Again")
Exit Sub
Else
'Try
'Addr = Dns.GetHostEntry(IPAddr).AddressList(0)
Addr = IPAddress.Parse(IPAddr)
Dim EP As New IPEndPoint(Addr, portNumber)
ServerSckt = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
ServerSckt.Bind(EP)
ServerSckt.Listen(0)
'txtIP.Enabled = False
ServerSckt.BeginAccept(AddressOf CallBack, Nothing)
'Catch Exp As Exception
'Exit Sub
'End Try
dbReader = Nothing
dbcomm.Connection.Close()
dbconn.Close()
End If
End Sub
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
'SvrStpd = True
' Call EndComm()
End
End Sub
Private Sub Username_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Username.TextChanged
End Sub
End Classهذ