Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 清除IRC服务器输入中不必要的文本_Vb.net_String_Irc - Fatal编程技术网

Vb.net 清除IRC服务器输入中不必要的文本

Vb.net 清除IRC服务器输入中不必要的文本,vb.net,string,irc,Vb.net,String,Irc,我正在为自己制作一个简单的IRC客户端,因为我真的不认为需要很多mIRC的功能,但是我在清理服务器的输入时遇到了问题 现在,在connect上,我得到以下信息: [16:37]:young.home.net注意AUTH:*正在查找您的主机名… :young.home.net NOTICE AUTH:*找到了您的主机名 PING:dev7aed31 [16:37]:DE7AED31!nospoof@young.home.netPRIVMSG Logan:版本 :young.home.net 451

我正在为自己制作一个简单的IRC客户端,因为我真的不认为需要很多mIRC的功能,但是我在清理服务器的输入时遇到了问题

现在,在connect上,我得到以下信息:

[16:37]:young.home.net注意AUTH:*正在查找您的主机名…
:young.home.net NOTICE AUTH:*找到了您的主机名
PING:dev7aed31
[16:37]:DE7AED31!nospoof@young.home.netPRIVMSG Logan:版本
:young.home.net 451 PING:您尚未注册
[16:37]:young.home.net 001 Logan:欢迎来到YoungNet IRC网络Logan!lyoung@127.0.0.1
:young.home.net 002 Logan:您的主机是young.home.net,运行版本为Unreal3.2.8.1 :young.home.net 003 Logan:此服务器是在2009年4月12日星期日14:47:33创建的

我正试图把它整理成这样:

[16:37]-young.home.net-**正在查找您的主机名…
[16:37]-young.home.net-**找到了您的主机名
[16:37][Logan]版本
[16:37]您尚未注册
欢迎来到YoungNet IRC网络Logan!lyoung@127.0.0.1
您的主机是young.home.net,运行版本为Unreal3.2.8.1 此服务器是在2009年4月12日14:47:33创建的

我读过IRCP(RFC1459),我理解服务器输入的格式,但我似乎无法去掉不需要的东西。。。一位朋友建议将输入加载到一个数组中,并分别处理每个项目,但我似乎无法让它工作。我试过了,但似乎没什么不同。。。这是我的密码

Public Function recv() As String
    Dim mail As String
    Try
        Dim Data(4096) As Byte
        sock.Receive(Data, 4096, Net.Sockets.SocketFlags.None)
        mail = System.Text.ASCIIEncoding.UTF8.GetString(Data)
        If mail.Contains(" ") Then
            If mail.Contains("PING") Then
                Dim pserv As String = mail.Substring(mail.IndexOf(":"), mail.Length - mail.IndexOf(":"))
                pserv = pserv.TrimEnd(Chr(0))
                'MsgBox("pserv: " & pserv)
                send("PONG " & pserv)
            ElseIf mail.Substring(mail.IndexOf(" ") + 1, 7) = "PRIVMSG" Then
                Dim tmparr() As String = Nothing
                Dim rnick, rmsg As String
                mail = mail.Remove(0, 1)
                tmparr = mail.Split("!")
                rnick = tmparr(0)
                tmparr = mail.Split(":")
                rmsg = tmparr(1)
                mail = "<" & rnick & "> " & rmsg
            ElseIf mail.Substring(mail.IndexOf(" ") + 1, 6) = "NOTICE" Then
                Dim tmparr() As String = Nothing
                Dim rnick, rmsg As String
                mail = mail.Remove(0, 1)
                tmparr = mail.Split("!")
                rnick = tmparr(0)
                tmparr = mail.Split(":")
                rmsg = tmparr(1)
                mail = "-" & rnick & "- " & rmsg
            Else
                Dim tmparr() As String = Nothing
                Dim rnick, rmsg As String
                tmparr = mail.Split(" ")
                rnick = tmparr(0)
                tmparr = mail.Split(":")
                rmsg = tmparr(1)
                mail = rmsg
            End If
        End If

        mail = g.Timestamp & mail

    Catch ex As Exception
        MsgBox(ex.ToString)
        mail = "ERROR: " & ex.Message & vbCrLf
    End Try
    Return mail
End Function
公共函数recv()作为字符串
将邮件设置为字符串
尝试
Dim数据(4096)作为字节
接收(数据,4096,Net.Sockets.SocketFlags.None)
mail=System.Text.ascienceoding.UTF8.GetString(数据)
如果mail.Contains(“”),则
如果mail.Contains(“PING”),则
Dim pserv As String=mail.Substring(mail.IndexOf(“:”),mail.Length-mail.IndexOf(“:”)
pserv=pserv.修剪(Chr(0))
'MsgBox(“pserv:&pserv”)
发送(“PONG”和pserv)
ElseIf mail.Substring(mail.IndexOf(“”+1,7)=“PRIVMSG”然后
Dim tmparr()作为字符串=无
Dim rnick,rmsg作为字符串
mail=mail.Remove(0,1)
tmparr=mail.Split(“!”)
rnick=tmparr(0)
tmparr=mail.Split(“:”)
rmsg=tmparr(1)
mail=”“&rmsg
ElseIf mail.Substring(mail.IndexOf(“”+1,6)=“NOTICE”然后
Dim tmparr()作为字符串=无
Dim rnick,rmsg作为字符串
mail=mail.Remove(0,1)
tmparr=mail.Split(“!”)
rnick=tmparr(0)
tmparr=mail.Split(“:”)
rmsg=tmparr(1)
mail=“-”&r单击-”&rmsg
其他的
Dim tmparr()作为字符串=无
Dim rnick,rmsg作为字符串
tmparr=mail.Split(“”)
rnick=tmparr(0)
tmparr=mail.Split(“:”)
rmsg=tmparr(1)
邮件=rmsg
如果结束
如果结束
邮件=g.时间戳和邮件
特例
MsgBox(例如ToString)
mail=“ERROR:”&例如消息和vbCrLf
结束尝试
回信
端函数

这里的任何提示都将不胜感激。

好的,我在这里找到解决方案后忙得不可开交,以至于我完全忘记了stackoverflow

[http://www.mirc.net/raws/][1]

[1] :包含原始数字代码的列表,这些代码将服务器输出整齐地分类到客户端应用程序

然而,在使用原始数字之前,需要进行一些拆分。见下文:

' This function takes the raw input from the server as a parameter.
' NOTE: No modification has been done before this point.

Private Function Clean(ByVal Target As String) As String
    ' Get each line
    Dim temp() As String = Target.Split(vbCrLf)
    Dim back As String = Nothing

    ' For each line in the current string
    For i As Integer = 0 To temp.Length - 1
        ' Split the line 
        Dim result() As String = temp(i).Split(New String() {" :"}, StringSplitOptions.None)
        Dim j As Integer = Nothing
        Try
            ' NOTICE AUTH messages aren't covered in raw format, so this cleans those up
            If result(0).Contains("NOTICE AUTH") Then
                If Left(result(0), 1) <> ":" Then
                    ' g.Timestamp = "[" & Now.Hour & ":" & Now.Minute & "]"
                    back += g.Timestamp & " (" & result(0).Substring(2, result(0).IndexOf(" ") - 2) & ") " & result(1) & vbCrLf
                Else
                    back += g.Timestamp & " (" & result(0).Substring(1, result(0).IndexOf(" ") - 1) & ") " & result(1) & vbCrLf
                    g.host = result(0).Substring(1, result(0).IndexOf(" ") - 1)
                End If
            End If

            If Integer.TryParse(result(0).Substring(result(0).IndexOf(" ") + 1, 3), j) Then
                Select Case result(0).Substring(result(0).IndexOf(" ") + 1, 3)
                    ' For each code, modify the input here, this is just an example of what I've done...
                    Case "001" : back += ":=:" & vbCrLf & g.Timestamp & result(1) & vbCrLf
                End Select
            End If
        Catch ex As Exception

        End Try
    Next

    ' More stuff goes here (handling PING? PONG! events and such)

    Return back
End Function
”此函数将来自服务器的原始输入作为参数。
注:在此之前未进行任何修改。
私有函数Clean(ByVal目标作为字符串)作为字符串
“听好每一行
Dim temp()作为字符串=Target.Split(vbCrLf)
变暗为字符串=无
'对于当前字符串中的每一行
对于i,整数=0到临时长度-1
“分道扬镳
Dim result()为String=temp(i).Split(新字符串(){”:“},StringSplitOptions.None)
Dim j作为整数=无
尝试
请注意,原始格式中没有包含身份验证消息,因此这会清除这些消息
如果结果(0).包含(“注意验证”),则
如果左(结果(0),1)“:”则
'g.Timestamp=“[”&Now.Hour&“:”&Now.Minute&“]
back+=g.Timestamp&“(”&结果(0).子字符串(2,结果(0).IndexOf(“”-2)&“)”&结果(1)&vbCrLf
其他的
back+=g.Timestamp&“(”&结果(0).子字符串(1,结果(0).IndexOf(“”-1)&“)”&结果(1)&vbCrLf
g、 host=result(0).子字符串(1,result(0).IndexOf(“”-1)
如果结束
如果结束
如果整数.TryParse(结果(0).Substring(结果(0).IndexOf(“”+1,3),j),则
选择Case result(0).子字符串(result(0).IndexOf(“”+1,3)
'对于每个代码,在这里修改输入,这只是我所做的一个示例。。。
案例“001”:返回+=”:=:“&vbCrLf&g.时间戳和结果(1)&vbCrLf
结束选择
如果结束
特例
结束尝试
下一个
“这里有更多的东西(处理乒乓球之类的事情)
返回
端函数