chatserv.frm

来自「vb代码集,收集许多VB网络编程代码」· FRM 代码 · 共 494 行

FRM
494
字号
VERSION 5.00
Begin VB.Form frmChatServer 
   Caption         =   "Chat Server"
   ClientHeight    =   4500
   ClientLeft      =   990
   ClientTop       =   3675
   ClientWidth     =   7995
   LinkTopic       =   "Form1"
   PaletteMode     =   1  'UseZOrder
   ScaleHeight     =   4500
   ScaleWidth      =   7995
   Begin VB.Timer Timer2 
      Left            =   3360
      Top             =   1440
   End
   Begin VB.TextBox txtSend 
      Height          =   1335
      Left            =   120
      MaxLength       =   255
      MultiLine       =   -1  'True
      TabIndex        =   13
      Top             =   3000
      Width           =   6495
   End
   Begin VB.CommandButton cmdSendText 
      Caption         =   "Send Text"
      Default         =   -1  'True
      Height          =   615
      Left            =   6840
      TabIndex        =   12
      Top             =   3720
      Width           =   975
   End
   Begin VB.Timer Timer1 
      Left            =   2640
      Top             =   1440
   End
   Begin VB.CommandButton cmdExit 
      Caption         =   "Exit"
      Height          =   615
      Left            =   6840
      TabIndex        =   11
      Top             =   2520
      Width           =   975
   End
   Begin VB.TextBox txtThisHost 
      Height          =   285
      Left            =   5280
      TabIndex        =   5
      Text            =   "This Host Name"
      Top             =   600
      Width           =   2535
   End
   Begin VB.TextBox txtPort 
      Height          =   285
      Left            =   5280
      TabIndex        =   4
      Text            =   "2000"
      Top             =   240
      Width           =   2535
   End
   Begin VB.TextBox txtUserName 
      Height          =   285
      Left            =   1320
      TabIndex        =   3
      Text            =   "UserName"
      Top             =   600
      Width           =   2415
   End
   Begin VB.CommandButton DoFinger 
      Caption         =   "Listen"
      Height          =   615
      Left            =   6840
      TabIndex        =   2
      Top             =   1320
      Width           =   975
   End
   Begin VB.TextBox HostResponse 
      BeginProperty Font 
         Name            =   "Courier New"
         Size            =   8.25
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   1455
      Left            =   120
      MultiLine       =   -1  'True
      ScrollBars      =   3  'Both
      TabIndex        =   1
      Top             =   1320
      Width           =   6495
   End
   Begin VB.TextBox Host 
      Height          =   285
      Left            =   1320
      TabIndex        =   0
      Text            =   "ChatSvr"
      Top             =   240
      Width           =   2415
   End
   Begin VB.Label Label1 
      Caption         =   "Communication:"
      Height          =   255
      Left            =   120
      TabIndex        =   10
      Top             =   1080
      Width           =   1335
   End
   Begin VB.Label Label6 
      Caption         =   "Server:"
      Height          =   255
      Left            =   120
      TabIndex        =   9
      Top             =   240
      Width           =   855
   End
   Begin VB.Label Label5 
      Caption         =   "This Host:"
      Height          =   255
      Left            =   4080
      TabIndex        =   8
      Top             =   600
      Width           =   1095
   End
   Begin VB.Label lblPort 
      Caption         =   "Port:"
      Height          =   255
      Left            =   4080
      TabIndex        =   7
      Top             =   240
      Width           =   975
   End
   Begin VB.Label lblUserName 
      Caption         =   "User Name;"
      Height          =   255
      Left            =   120
      TabIndex        =   6
      Top             =   600
      Width           =   1095
   End
End
Attribute VB_Name = "frmChatServer"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim formHeightDiff As Integer
Dim formWidthDiff As Integer
Dim Socket2 As Integer
'Dim Socket1() As Integer   ' Code for multiple connections
Dim Sock As Integer
Dim SocketBuffer As sockaddr
'Dim counter As Integer   ' Code for multiple connections




Private Sub cmdExit_Click()
    closesocket Sock
    closesocket Socket2
    End

End Sub

Private Sub cmdSendText_Click()
    Dim RC As Integer
    Dim StartupData As WSADataType
    Dim IPAddr As Long
    Dim MsgBuffer As String * 2048
    Dim Regel As String
    Dim RegelUit As String
    Dim Bytes As Integer
    Dim Character As String
    Dim FromAddr As String
    Dim FromName As String
    Dim ToAddr As String
    Dim ToName As String
    Dim MustStop As Boolean
    Dim SelectOps As Long

    Regel = ReadLineFromSocket(Socket2)
    HostResponse.Text = HostResponse.Text & "<<< " & Regel & vbCrLf
    '  the following is where i put the ras conditions
    Select Case UCase(Left$(Regel, 4))
        Case "DIAL"
            Regel = "DIAL, Dial request. " & Regel
        Case "RSST"
            Regel = "RSST, Ras Status updatae request. " & Regel
        Case "HNGR"
            Regel = "HNGR, Hang up RAS Request. " & Regel
        Case "QUIT"
            Regel = "QUIT, was requested, socket will terminate " & Regel
            MustStop = True
        Case Else
    End Select
    
    If (MustStop = True) Then
        Regel = txtSend & " " & Regel
    End If

    RegelUit = "Server: " & txtSend & Chr(13) & Chr(10)
    RC = send(Socket2, ByVal RegelUit, Len(RegelUit), 0)
    HostResponse.Text = HostResponse.Text + RegelUit
    
    DoEvents
    If (MustStop = False) Then Exit Sub

    closesocket Socket2
    'closesocket Sock
    ' RC = WSACleanup()
    'End

End Sub

Private Sub Form_Load()
    Me.txtUserName = VBgetusername()
    Me.txtThisHost = VBgethostname
End Sub

Public Function VBgethostname() As String
    Dim tempstr As String
    Dim strlen As Integer, retval As Integer
        Dim StartupData As WSADataType

    retval = WSAStartup(&H101, StartupData)
    If retval = SOCKET_ERROR Then Exit Function
    
    strlen = 128
    tempstr = Space$(strlen)
    retval = 0
    retval = gethostname(tempstr, strlen)
    If retval = 0 Then
        VBgethostname = Left(Trim$(tempstr), (InStr(Trim$(tempstr), Chr(0)) - 1))
    Else
        VBgethostname = "get_hostname: ERROR"
    End If
    tempstr = ""
    
End Function

Public Function VBgetusername() As String
    Dim tempstr As String
    Dim strlen As Integer, retval As Integer
    Dim lname As Long
    strlen = 128
    tempstr = Space$(strlen)
    retval = WNetGetUser(lname, tempstr, 128)
    If retval = 0 Then
        VBgetusername = Trim$(tempstr)
    Else
        VBgetusername = "getusername: ERROR"
    End If
    tempstr = ""
End Function

Private Sub Form_Resize()
    If Me.WindowState <> 1 Then
        'HostResponse.Height = Finger.Height - formHeightDiff
        'HostResponse.Width = Finger.Width - formWidthDiff
    End If
End Sub

Private Sub DoFinger_Click()
    Dim RC As Integer
    Dim StartupData As WSADataType
    Dim IPAddr As Long
    Dim MsgBuffer As String * 2048
    Dim Regel As String
    Dim RegelUit As String
    Dim Bytes As Integer
    Dim Character As String '   Receive Buffer comes across for each character
    Dim FromAddr As String
    Dim FromName As String
    Dim ToAddr As String
    Dim ToName As String
    Dim MustStop As Boolean
    Dim SelectOps As Long
    Static bfirst As Boolean
    
    HostResponse.Text = "Starting:" & Chr$(13) + Chr$(10)
    RC = WSAStartup(&H101, StartupData)
    If RC = SOCKET_ERROR Then Exit Sub
    
    IPAddr = GetHostByNameAlias(Host)
    If IPAddr = -1 Then
        HostResponse.Text = "Unknown Host: " + Host
        Exit Sub
    End If

    Sock = Socket(PF_INET, SOCK_STREAM, 0)  ' AF_INET of PF_INET?
    If Sock < 0 Then
        HostResponse.Text = "Cannot socket() ..."
        Exit Sub
    End If
    Print "Number of socket() for Sock = "; Sock

    SocketBuffer.sin_family = AF_INET
    SocketBuffer.sin_port = htons(4000) ' alternative method GetServiceByName doesn't seem to work very well ' GetServiceByName("smtp", "TCP")
    SocketBuffer.sin_addr = htonl(INADDR_ANY)

    RC = bind(Sock, SocketBuffer, Len(SocketBuffer))
    If RC Then
        HostResponse.Text = "Cannot bind() ..." + _
                            Chr$(13) + Chr$(10) + _
                            GetWSAErrorString(WSAGetLastError())

        closesocket Sock
        RC = WSACleanup()
        Exit Sub
    End If

    RC = listen(Sock, 1) ' Establish a socket to listen for incoming connection.
    'listen (ByVal s As Integer, ByVal backlog As Integer) As Integer
    If RC Then
        HostResponse.Text = "Cannot listen() ..." + _
                            Chr$(13) + Chr$(10) + _
                            GetWSAErrorString(WSAGetLastError())

        closesocket Sock
        RC = WSACleanup()
        Exit Sub
    End If
    SelectOps = FD_READ Or FD_WRITE Or FD_CLOSE Or FD_ACCEPT
    If WSAAsyncSelect(Sock, Me.hWnd, ByVal 1025, ByVal SelectOps) Then
        If Sock > 0 Then
            RC = closesocket(Sock)
        End If
        MsgBox "Asynchronous error occurred"
        Exit Sub
    End If
    Timer1.Interval = 50
    
    Exit Sub
    
    If bfirst Then
        Do
            DoEvents
            Socket2 = accept(Sock, SocketBuffer, Len(SocketBuffer)) ' This is placed in a timer and checked every 5 seconds
        Loop Until Socket2 > 0
        Print "socket is Socket2"
        If Socket2 < 1 Then
            HostResponse.Text = "Cannot accept() ..." + _
                                Chr$(13) + Chr$(10) + _
                                GetWSAErrorString(WSAGetLastError())
    
            closesocket Sock
            RC = WSACleanup()
            Exit Sub
        End If
        bfirst = False
    End If
    
    Regel = "Connected to Server at: " & Time() & Chr(13) & Chr(10)
    RC = send(Socket2, ByVal Regel, Len(Regel), 0)
    HostResponse.Text = HostResponse.Text + Regel

    Regel = "Attached through port: " & txtPort & " on machine name: " & txtThisHost & Chr(13) & Chr(10)
    RC = send(Socket2, ByVal Regel, Len(Regel), 0)
    HostResponse.Text = HostResponse.Text + Regel

End Sub



Public Function ReadLineFromSocket(Sock As Integer)
    
    Dim Tekens As String * 255
    Dim Aantal As Integer
    Dim Character As String * 1
    Dim Result As String
    Dim Result2 As String
    
    ' Carriage return (vbCr = Chr$(13))
    ' Linefeed (vbLf = Chr$(10))
    Do
        Aantal = recv(Sock, ByVal Tekens, 1, 0)  ' Non-Blocking!
        If (Aantal > 0) Then
            Character = Left$(Tekens, Aantal)
            If (Asc(Character) >= Asc(" ")) Then
                Result = Result & Character
            End If
        End If
        If Character = "" Then
            Character = Chr(13)
        End If
    Loop While ((Aantal > 0) And (Asc(Character) <> 13))   ' looking for carriage return
    
    ReadLineFromSocket = Result
End Function


Private Sub Timer1_Timer()
    Dim RC As Integer
    Dim StartupData As WSADataType
    Dim IPAddr As Long
    Dim MsgBuffer As String * 2048
    Dim Regel As String
    Dim RegelUit As String
    Dim Bytes As Integer
    Dim Character As String
    Dim FromAddr As String
    Dim FromName As String
    Dim ToAddr As String
    Dim ToName As String
    Dim MustStop As Boolean
    'ReDim Preserve Socket1(counter + 1)   ' Code for multiple connections
    Socket2 = accept(Sock, SocketBuffer, Len(SocketBuffer))
    DoEvents
    
    'If socket1(Counter) > 0 Then   ' Code for multiple connections
    '    counter = counter + 1   ' Code for multiple connections
    If Socket2 > 0 Then   ' comment out this line for Code for multiple connections
        Timer1.Interval = 65000
        Timer2.Interval = 500
        Print "socket is Socket2"
        If Socket2 < 1 Then
            HostResponse.Text = "Cannot accept() ..." + _
                                Chr$(13) + Chr$(10) + _
                                GetWSAErrorString(WSAGetLastError())
            closesocket Sock
            RC = WSACleanup()
            Exit Sub
        End If
    
        Regel = "Connected to Server at: " & Time() & Chr(13) & Chr(10)
        RC = send(Socket2, ByVal Regel, Len(Regel), 0)
        'RC = send(Socket1(counter), ByVal Regel, Len(Regel), 0)
        HostResponse.Text = HostResponse.Text + Regel
    
        Regel = "Attached through port: " & txtPort & " on machine name: " & txtThisHost & Chr(13) & Chr(10)
        RC = send(Socket2, ByVal Regel, Len(Regel), 0)
        'RC = send(Socket1(counter), ByVal Regel, Len(Regel), 0)
        HostResponse.Text = HostResponse.Text + Regel
    End If

End Sub


Private Sub Timer2_Timer()
    Dim RC As Integer
    Dim StartupData As WSADataType
    Dim IPAddr As Long
    Dim MsgBuffer As String * 2048
    Dim Regel As String
    Dim RegelUit As String
    Dim Bytes As Integer
    Dim Character As String
    Dim FromAddr As String
    Dim FromName As String
    Dim ToAddr As String
    Dim ToName As String
    Dim MustStop As Boolean

    Regel = ReadLineFromSocket(Socket2)
    If Len(Regel) > 0 Then
        HostResponse.Text = HostResponse.Text & "<<< " & Regel & vbCrLf
    End If
    Select Case UCase(Left$(Regel, 4))
        Case "DIAL"
            Regel = "DIAL, Dial request. " & Regel
        Case "RSST"
            Regel = "RSST, Ras Status updatae request. " & Regel
        Case "HNGR"
            Regel = "HNGR, Hang up RAS Request. " & Regel
        Case "QUIT"
            Regel = "QUIT, was requested, socket will terminate " & Regel
            MustStop = True
        Case Else
    End Select
    
    If (MustStop = True) Then
        Regel = "We MUST be STOPPED!"

        RegelUit = "The Client Disconnected: " & Regel & Chr(13) & Chr(10)
        RC = send(Socket2, ByVal RegelUit, Len(RegelUit), 0)
        HostResponse.Text = HostResponse.Text + RegelUit
        DoEvents
    
        closesocket Socket2
        'closesocket Sock
        ' RC = WSACleanup()
    
    
        'End
    End If

End Sub


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?