2012-02-19 2 views
0

서버가 메시지를 보내고 있다고보고하더라도 내 클라이언트 프로그램이 NetworkStream.Read에 멈추었습니다. 클라이언트와 서버가 동일한 컴퓨터에서 실행 중입니다.소켓 메시지가 계속 수신 됨

전체 서버 코드 (콘솔 응용 프로그램)

Imports System.Net.Sockets 
Imports System.Text 

Module Module1 
    Sub Main() 
     'Dim address As New System.Net.IPAddress("127.0.0.1") 
     'Dim serverSocket As New TcpListener(address, 8888) 
     Dim serverSocket As New TcpListener(8888) 
     Dim clientSocket As TcpClient 
     Dim counter As Integer 

     serverSocket.Start() 
     msg("Server Started") 
     counter = 0 
     While (True) 
      counter += 1 
      clientSocket = serverSocket.AcceptTcpClient() 
      msg("Client No:" + Convert.ToString(counter) + " started!") 
      Dim client As New handleClient 
      client.startClient(clientSocket, Convert.ToString(counter)) 
     End While 

     clientSocket.Close() 
     serverSocket.Stop() 
     msg("exit") 
     Console.ReadLine() 
    End Sub 

    Sub msg(ByVal mesg As String) 
     mesg.Trim() 
     Console.WriteLine(" >> " + mesg) 
    End Sub 

    Public Class handleClient 
     Dim clientSocket As TcpClient 
     Dim clNo As String 
     Public Sub startClient(ByVal inClientSocket As TcpClient, ByVal clineNo As String) 
      Me.clientSocket = inClientSocket 
      Me.clNo = clineNo 
      Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat) 
      ctThread.Start() 
     End Sub 
     Private Sub doChat() 
      Dim requestCount As Integer 
      Dim bytesFrom(10024) As Byte 
      Dim dataFromClient As String 
      Dim sendBytes As [Byte]() 
      Dim serverResponse As String 
      Dim rCount As String 
      requestCount = 0 

      While (True) 
       Try 
        requestCount = requestCount + 1 
        Dim networkStream As NetworkStream = clientSocket.GetStream() 
        networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize)) 
        dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom) 
        dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$")) 
        msg("From client-" + clNo + ": " + dataFromClient) 
        rCount = Convert.ToString(requestCount) 
        serverResponse = "Server to client(" + clNo + ") " + rCount 
        sendBytes = Encoding.ASCII.GetBytes(serverResponse) 
        networkStream.Write(sendBytes, 0, sendBytes.Length) 
        networkStream.Flush() 
        msg(serverResponse) 
       Catch ex As Exception 
        MsgBox(ex.ToString) 
       End Try 

      End While 

     End Sub 
    End Class 

End Module 

전체 클라이언트 코드 (양식 응용 프로그램)

Public Class CSocketClient 
    Dim clientSocket As New System.Net.Sockets.TcpClient() 
    Dim serverStream As NetworkStream 

    'Connect 
    Public Sub init(ByVal address As String, ByVal port As Integer) 
     clientSocket.Connect(address, port) 
    End Sub 

    'Run once 
    Public Sub runOnce() 
     sendMSG("Message1 from Client$") 
     receiveMSG() 
     sendMSG("Message2 from Client$") 
     receiveMSG() 
    End Sub 

    'Send msg 
    Public Sub sendMSG(ByVal msg As String) 
     Dim serverStream As NetworkStream = clientSocket.GetStream() 
     Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes(msg) 
     serverStream.Write(outStream, 0, outStream.Length) 
     serverStream.Flush() 
    End Sub 

    'Receive msg 
    Public Sub receiveMSG() 
     Dim inStream(10024) As Byte 
     Dim buffSize As Integer = clientSocket.ReceiveBufferSize 
     MsgBox("X") 
     serverStream.Read(inStream, 0, buffSize) 
     MsgBox("Y") 
     Dim returndata As String = System.Text.Encoding.ASCII.GetString(inStream) 
     MsgBox("Data from Server : " & returndata) 
    End Sub 
End Class 

클라이언트 사용하려면 :

Dim client As New CSocketClient 
client.init("127.0.0.1", 8888) 
client.runOnce() 

내가 추가를이를 확인하기 위해and MsgBox("Y")serverStream.Read을 넘지 않습니다. "X"는 정상적으로 나타납니다. Y에 도달하지 않습니다.

왜 이런 일이 일어 났는지 말할 수 있습니까?

답변

0

수정 됨. 보내고 같은 NetworkStream .. 바보 같은 실수를 공유해야합니다!

Public Sub runOnce() 
    Dim serverStream As NetworkStream = clientSocket.GetStream() 
    sendMSG("Message1 from Client$", serverStream) 
    receiveMSG(serverStream) 
End Sub