2012-02-19 11 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 

完全なクライアントコード(Formsアプリケーション)

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() 

MsgBox("X")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 
関連する問題