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에 도달하지 않습니다.
왜 이런 일이 일어 났는지 말할 수 있습니까?