現在VB.NETでチャットを作っています。
あるサンプルを参考にしているのですが、それだと日本語が文字化けしてしまいます。
エンコードを行うと、日本語は送れるのですが今度は正常に動作してくれなくなって・・・。
ちなみに送信処理
Private Sub Send(ByVal t As String)
On Error Resume Next
Dim w As New IO.StreamWriter(myclient.GetStream, UnicodeEncoding.GetEncoding(932))
w.Write(t & vbCrLf)
w.Flush()
End Sub
受信したByte型のデータを文字に変換する処理
Private Sub BuildString(ByVal Bytes() As Byte, ByVal offset As Integer, ByVal count As Integer)
Dim intIndex As Integer
Dim chars() As Char = UnicodeEncoding.GetEncoding(932).GetChars(Bytes)
For intIndex = offset To offset + count - 1
If Bytes(intIndex) = 10 Then
mytext.Append(chars(intIndex))
mytext.Append(vbCrLf)
Dim params() As Object = {mytext.ToString}
Me.Invoke(New DisplayInvoker(AddressOf Me.DisplayText), params)
mytext = New StringBuilder
Else
mytext.Append(chars(intIndex))
End If
Next
End Sub
で処理しています。
これだと受信した文字を表示したときに改行してくれません。
エンコードが間違っているのでしょうか?
それとも何か他のところが違うのでしょうか?
直接の回答ではありません、
バイト配列から文字に変換するばあい
mytext = Encoding.Default.GetString(bytebuffer, 0, leng)
の様な感じのではと思います。
かっぱさんへの直接的な回答はその所に詳しい方にお願いします。
KUWADAさん、ありがとうございます。
エンコードの方は
>mytext = Encoding.Default.GetString(bytebuffer, 0, leng)
を参考に出来ました。
ですがまた新たな問題が・・・。
このチャットでは今チャットを行っているメンバーを表示しているのですが、その表示が出来なくなってしまいました。
以下の処理で文字+サーバに保存しているメンバーを送信しています。
qn.Send(Data)
qn.Send("clear")
For i = 0 To friendsbox.Items.Count - 1
Dim s As String = "client:" & friendsbox.Items.Item(i)
qn.Send(s)
Next
そしてクライアント側では
If LSet(t, 5) = "clear" Then
ListView1.Items.Clear()
chatbox.AppendText("")
Else
If LSet(t, 7) = "client:" Then
f = Len(t)
b = (Strings.Right(t, f - 7))
ListView1.Items.Add(Strings.Left(b, Len(b) - 2), 0)
chatbox.AppendText("")
Else
If LSet(t, 8) = "closenow" Or LSet(t, 5) = "nick:" Then
chatbox.AppendText("")
Else
chatbox.AppendText(t)
End If
End If
End If
として文字かメンバー名かを判断しています。
クライアントでclient:○○という文は受信しているのですがメンバーを表示するリストには表示されなくて・・・。
ちなみに参考にしているサンプルプログラムは
http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=1381&lngWId=10です。
原因が解る方いらっしゃいますでしょうか?
ツイート | ![]() |