2011-10-09 2 views
1

두 응용 프로그램간에 텍스트 데이터를 보내도록하는 데 문제가 있습니다. 메시지는 문제없이 전송되며 응답도 수신됩니다. 그러나 각 측면에서 송수신되는 문자열의 끝에는 "New line"문자가 많이 있습니다. 전체 버퍼를 읽고 있기 때문에 그럴 것 같습니다. Chr (10)과 Chr (13)을 모두 제거하려고했습니다. 나는 또한 문자열을 자르려고했으나 효과가 없었습니다. VB.Net의 TCP 소켓을 사용하는 응용 프로그램 간의 텍스트 통신

다음은 코드 내가 사용

클라이언트 측 :

Dim cl As New TcpClient 
cl.Connect("127.0.0.1", 2000) 
Dim str As NetworkStream = cl.GetStream 
Dim HelloInBytes As Byte() = Encoding.UTF8.GetBytes("Hello") 
str.Write(HelloInBytes, 0, HelloInBytes.Length) 
Dim Buffer(cl.ReceiveBufferSize) As Byte 
str.Read(Buffer, 0, cl.ReceiveBufferSize) 
Console.WriteLine(Encoding.UTF8.GetChars(Buffer)) 

서버 측 :

Dim srv As New TcpListener(IPAddress.Any, 2000) 
srv.Start() 
Dim cl As TcpClient = srv.AcceptTcpClient 
Dim str As NetworkStream = cl.GetStream 
Dim buf(cl.ReceiveBufferSize) As Byte 
str.Read(buf, 0, cl.ReceiveBufferSize) 
Dim res As Byte() = Encoding.UTF8.GetBytes("World") 
str.Write(res, 0, res.Length) 

방법을 "깨끗한"수신 된 문자열이된다?

도움 주셔서 감사합니다.

편집 : 해결책 : 하즐 솔루션과 함께 작동합니다. I는 수신 된 문자열에이 기능을 사용하는 다른 해결책을 발견 :

Public Function CleanString(ByRef Str As String) 
    Return Str.Replace(Encoding.UTF8.GetChars({0, 0, 0, 0}), Nothing) 
End Function 

UTF8은 4 바이트에서 작동, 및 I 스트림을 읽고 난, 버퍼에 넣어 때 어떤 문자는 존재하지 않는 경우 4 바이트는 0 값을 유지합니다.

답변

1

사용 플러시()는 버퍼에 쓰기 후

str.Write(HelloInBytes, 0, HelloInBytes.Length) 
str.Flush() 

그리고

str.Write(res, 0, res.Length) 
str.Flush() 

편집 :

당신은 그런 구분 또는 무언가를 사용할 수 있습니다.

클라이언트 측 :

Dim delimiterChar as Char = "|" 
Dim out As Byte() = System.Text.Encoding.UTF8.GetBytes(txtOut.Text + delimiterChar) 
server.Write(outStream, 0, outStream.Length) 
server.Flush() 

그리고 서버 측 것은 :

Dim delimiterChar as Char = "|" 
Dim Stream As NetworkStream = clientSocket.GetStream() 
Stream.Read(bytesFrom, 0, CInt(client.ReceiveBufferSize)) 
Dim data As String = System.Text.Encoding.UTF8.GetString(bytesFrom) 
data = data.Substring(0, data.IndexOf(delimiterChar)) 'From 0 to delimiter 
+0

awnser에 감사하지만 작동하지 않았습니다. 양쪽에 추가했습니다. 그러나 많은 "NewLine"이 여전히 남아 있습니다. 아이디어가 있으십니까? –

+0

수정 된 답변보기 – Jaxedin

0

이 수신 된 문자열의 끝에서 모든 널 (null) 문자를 제거합니다

client_content = client_content.Replace(Chr(0), Nothing)

새로운 제거하려면 줄 :

client_content = client_content.Replace(vbLf, Nothing)

관련 문제