非常に奇妙な問題です。新しいユーザーをサーバーに登録しようとすると、サーバーは「OK」や「usernameTaken」などのメッセージをポストバックします。この返された文字列を別の文字列と比較すると(返された値に基づいてアクションを実行する)、比較は機能しません。ソケット戻り文字列変数
Dim backupX As New CBackup
backupX.startSocket("127.0.0.1", 8888)
Dim str1 As String = backupX.registerUser("user1", "testpass")
Dim str2 As String = "usernameTaken"
If String.Equals(str1, str2) Then
MsgBox("Strings are Equal() ")
Else
MsgBox("Strings are not Equal() - " & str1 & " vs " & str2)
End If
これは、その結果:だから何これは示しては、文字列が等しいであってもということである
、それはそうでないサイス。そして、MsgBoxはStrings are not Equal() - usernameTaken vs usernameTaken
と言って、vs usernameTaken
の部分を完全に残しました。
ここでは何が起こっていますか? cbackupとクラスの
追加情報:
backupX.registerUser機能:
Public Function registerUser(ByVal name As String, ByVal password As String) As String
Dim md5 As New CMD5
If name.Contains(",") Then
Return "0-commaInName"
Else
Return SocketSendAndReceiveMSG("registerUser," & name & "," & md5.GenerateStringHash(password))
End If
End Function
SocketSendAndReceiveMSG機能:
Private Function SocketSendAndReceiveMSG(ByVal msg As String) As String
Return socket.sendAndReceiveMSG(msg)
End Function
socket.sendAn dReceiveMSG機能: - > SocketSendAndReceiveMSG
Public Function sendAndReceiveMSG(ByVal msg As String) As String
Dim serverStream As NetworkStream = clientSocket.GetStream()
sendMSG(msg & "$", serverStream)
Return receiveMSG(serverStream)
End Function
receiveMSG機能
Public Function receiveMSG(ByVal serverStream As NetworkStream) As String
Dim inStream(10024) As Byte
Dim buffSize As Integer = clientSocket.ReceiveBufferSize
serverStream.Read(inStream, 0, buffSize)
Dim returndata As String = System.Text.Encoding.ASCII.GetString(inStream)
Form1.msg("Data from Server : " & returndata)
Return returndata
End Function
は、ソケットコードのようになりそうだが...各機能は、対応する機能戻り値(のregisterUserを返すだけで正常に動作しています - > sendAndReceiveMSG - > receiveMSG)。どのようにこれがstr1
文字列変数をこのように混乱させているのかわかりません。
返されたバイトには、上記の原因となるいくつかのバックスペースなどが含まれていますか?単純にサーバーの戻りバイトを出力して、その内容を確認しようとしましたか? – Smudge202
@ Smudge202 'msg(" Bytes Sent: "&sendBytes.Length)'をサーバーに追加しました。報告された: 'Bytes Sent:13'。は、私にはよく見えますよ。編集:私はまた、クライアントのチェックを追加しました。 'MsgBox(" str1長さ: "&str1.Length&" - str2長さ: "&str2.Length)'である。 'str1:10024 - str2:13'と報告します。おかしいですね! 'receiveMSG'関数の' Dim inStream(10024)As Byte'と何か関係があります。今すぐチェックしてください – natli
"vs"が表示されない場合は、古いバージョンのコードが実行されていますか?あなたのソリューションを再構築しようとしましたか?そうでなければ、あなたのメソッドは全く呼び出されないかもしれません。もう一つの同様のメソッドがあります。 –