2012-02-20 18 views
0

非常に奇妙な問題です。新しいユーザーをサーバーに登録しようとすると、サーバーは「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 

これは、その結果:だから何これは示しては、文字列が等しいであってもということである

vbSocketProblem

、それはそうでないサイス。そして、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文字列変数をこのように混乱させているのかわかりません。

+0

返されたバイトには、上記の原因となるいくつかのバックスペースなどが含まれていますか?単純にサーバーの戻りバイトを出力して、その内容を確認しようとしましたか? – Smudge202

+0

@ 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

+0

"vs"が表示されない場合は、古いバージョンのコードが実行されていますか?あなたのソリューションを再構築しようとしましたか?そうでなければ、あなたのメソッドは全く呼び出されないかもしれません。もう一つの同様のメソッドがあります。 –

答えて

0

If String.Equals(str1, str2) Thenにブレークポイントを設定し、両方の文字列を検査します。彼らは同じ長さですか?プログラムがブレークポイントで停止しているのですか、別のコード部分が実行されていますか?

+0

それを考え出した。サーバーのバッファサイズを変更するには、次のように変更します。serverStream.Read(inStream、0、buffSize)をDim bytesRead = serverStream.Read(inStream、0、buffSize)に変更し、Dim Returndata As String = System.Text.Encoding.ASCII.GetString(inStream) 'Dim returndata As String = System.Text.Encoding.ASCII.GetString(inStream、0、bytesRead)'です。 – natli