Dim tempRemoteEP As EndPoint = CType(sender, EndPoint) recv = ClientSocket.ReceiveFrom(data, tempRemoteEP)
Dim msgHead As String = Encoding.Unicode.GetString(data, 0, 4) '获得消息头的内容 Select Case msgHead Case MSGEND msgSendEnd = True sendDone.Set() Case LOGININ addOnLine(data, recv) Case LOGINOUT removeOnLine(data, recv) Case MSGEND msgSendEnd = True sendDone.Set() Case MAKHOLD Console.WriteLine(Chr(10) & Chr(13) & "收到打洞消息.") makeHold(data, recv) Console.Write("Client>") Case CHATMSG showChatMsg(data, recv) Case HOLDOK testHold = True holdDone.Set() Case CHTMSGEND testChat = True chatDone.Set() End Select
Catch End Try
End While End Sub
'发送聊天消息 Private Sub sendChatMsg(ByVal remoteUser As String, ByVal chatMsgStr As String)
If remoteUser = username Then Console.WriteLine("猪头,你想干什么!!!") Exit Sub End If
Dim i As Integer
Dim remoteUEP As IPEndPoint For i = 0 To OLUserName.Length - 1 If remoteUser = OLUserName(i) Then remoteUEP = OLUserEP(i) Exit For End If If i = OLUserName.Length - 1 Then Console.WriteLine("找不到你想发送的用户.") Exit Sub End If Next
Dim msgbytes() As Byte = Encoding.Unicode.GetBytes(CHATMSG & username & "|" & chatMsgStr) Dim holdbytes() As Byte = Encoding.Unicode.GetBytes(P2PCONN & username & "|" & remoteUser)
chatDone = New ManualResetEvent(False) ClientSocket.SendTo(msgbytes, remoteUEP) chatDone.WaitOne(10000, True) If testChat = True Then testChat = False Exit Sub End If
testHold = False While testHold <> True Console.WriteLine("打洞ing.....") holdDone = New ManualResetEvent(False) ClientSocket.SendTo(holdbytes, remoteUEP) ClientSocket.SendTo(holdbytes, ServerEP) holdDone.WaitOne(10000, True) If testHold = True Then Exit While Else Console.WriteLine("打洞超时,发送消息失败.") Console.Write("是否重试,按Y重试,按任意值结束发送:") Dim YorN As String = Console.ReadLine().ToUpper If YorN = "Y" Then testHold = False Else Exit Sub End If End If End While
While testChat <> True Console.WriteLine("打洞成功,正在准备发送.....") chatDone = New ManualResetEvent(False) ClientSocket.SendTo(msgbytes, remoteUEP) chatDone.WaitOne(10000, True) If testChat = True Then Console.WriteLine("消息发送成功!!") Exit While Else Console.WriteLine("发送超时,发送消息失败.") Console.Write("是否重试,按Y重试,按任意值结束发送:") Dim YorN As String = Console.ReadLine().ToUpper If YorN = "Y" Then testChat = False Else Exit Sub End If End If End While testHold = False testChat = False End Sub
'处理聊天消息 Private Sub showChatMsg(ByVal indata() As Byte, ByVal recvcount As Integer) Dim msgStr As String = Encoding.Unicode.GetString(indata, 4, recvcount - 4) Dim splitStr() As String = msgStr.Split("|") Dim fromUname As String = splitStr(0) |