利用Winsock控件创建的局域网聊天程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.服务器端

往服务器窗体(命名为frmServer)添加三个控件,分别为LIST1(存放在线好友名单),text1(留言内容)和text2(聊天记录),程序如下:

Option Explicit

Const Busy As Boolean = False

Const Free As Boolean = True

Dim ConnectState() As Boolean

Dim SIndex

Dim Usrs(0 To 32) '在线人名

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

End

End Sub

Private Sub Form_Load()

If App.PrevInstance = True Then

MsgBox "程序已在运行", vbCritical

End

End If

ReDim Preserve ConnectState(0)

On Error Resume Next

ConnectState(0) = Free

Listener.LocalPort = 1001 '端口号

Listener.Listen '开始侦听

End Sub

Private Sub Listener_ConnectionRequest(ByValrequestID As Long)

Dim SockIndexAs Integer

Dim SockNumAs Integer

On Error Resume Next

SockNum = UBound(ConnectState)

If SockNum> 32 ThenExit Sub

'查找空闲的SckServer

SockIndex = FindFreeSocket

'如果已有的sock都忙,而且sock数不超过32个,动态添加sock

If SockIndex>SockNum Then Load SckServer(SockIndex)

ConnectState(SockIndex) = Busy

SckServer(SockIndex).Tag = SockIndex

'接受请求

SckServer(SockIndex).Accept (requestID)

End Sub

Private Sub SckServer_DataArrival(Index As Integer, ByValbytesTotal As Long)

Dim dx As String

SIndex = Index

SckServer(Index).GetData dx, vbString

If Len(Text2.Text) >= 512 Then Text2.Text = ""

If Right(dx, 2) = "||" Then

List1.AddItem Replace(dx, "|", "")

Usrs(SIndex) = Replace(dx, "|", "")

Timer1.Enabled = True

Text2.Text = Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”上线。" &vbCrLf& Text2.Text

Open App.Path& "\record.txt" For Append As #1

Write #1, Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”上线。"

Close #1

Else

Text1.Text = Left(dx, InStr(dx, "|")) & Format(Now(), "YY-MM-DD hh:mm:ss") &vbCrLf&Usrs(Index) & "☆说:" & Right(dx, Len(dx) - InStr(dx, "|"))

Text2.Text = Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”对“" & Replace(dx, "|", "”说:" &vbCrLf) &vbCrLf& Text2.Text

Open App.Path& "\record.txt" For Append As #1

Write #1, Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”对“" & Replace(dx, "|", "”说:" &vbCrLf)

Close #1

End If

End Sub

Private Sub SckServer_Close(Index As Integer)

Dim i%

On Error Resume Next

If SckServer(Index).State <>sckClosed Then SckServer(Index).Close

ConnectState(Index) = Free

Text2.Text = Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”下线。" &vbCrLf& Text2.Text

相关文档
最新文档