RecieveBufferSize OutOfRangeException(.NET) [英] RecieveBufferSize OutOfRangeException (.NET)
问题描述
(在我开始之前,我知道如果有人能想到一个我会喜欢的更好的名字,这个标题真是太糟糕了
我耗尽了编写程序的想法,并找到了列出一些内容的帖子,因此我制作了一个简单的本地聊天服务器.服务器运行正常,直到我尝试连接(通过tcpClient)
来自客户端的代码如下:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
readData = "Connected."
Msg()
clientSocket.Connect("xxx.xxx.xx.xxx", 8888)
serverStream = clientSocket.GetStream()
Dim outStream As Byte() = Encoding.ASCII.GetBytes(TextBox1.Text & "$")
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf GetMessage)
ctThread.Start()
End Sub
该IP是我的IPV4静态地址.
在服务器端:
Dim serverSocket As TcpListener = New TcpListener(ip, 8888)
Dim clientSocket As TcpClient
Dim counter As Integer = 0
serverSocket.Start()
Msg("Server started.")
While (True)
counter += 1
clientSocket = serverSocket.AcceptTcpClient()
Dim bytesFrom(10024) As Byte
Dim dataFromClient As String
Dim networkStream As NetworkStream = clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClient = Encoding.ASCII.GetString(bytesFrom)
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
clientsList(dataFromClient) = clientSocket
Msg(dataFromClient & "joined the server.")
Dim client as new handleClient
client.startClient(clientSocket, dataFromClient, clientsList)
End While
当我尝试连接客户端时,服务器抛出> 此 >
我不明白为什么会这样.任何帮助将不胜感激.
这是不正确的:
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
ReceiveBufferSize
表示TCP套接字使用的内部缓冲区大小,您不应该在代码中使用它(也无需调用CInt()
,因为它已经一个整数).
您已经有自己的缓冲区,应该指定其长度:
networkStream.Read(bytesFrom, 0, bytesFrom.Length)
第三个参数表示在一个Read()
调用中可以接收的最大字节数.显然,这不能超过缓冲区的长度,这就是为什么您需要准确地指定它的长度(或者,如果要读取更特定数量的字节,则为较小的值).
(Before I start I know this title is awful if someone could think of a better name I'd love it)
I ran out of ideas to program, and found a post listing some things, so I made a simple local chat server. The server runs fine until I attempt to connect (via tcpClient)
The code from the client side is as follows:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
readData = "Connected."
Msg()
clientSocket.Connect("xxx.xxx.xx.xxx", 8888)
serverStream = clientSocket.GetStream()
Dim outStream As Byte() = Encoding.ASCII.GetBytes(TextBox1.Text & "$")
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf GetMessage)
ctThread.Start()
End Sub
Where the IP is my IPV4 static address.
On the server side:
Dim serverSocket As TcpListener = New TcpListener(ip, 8888)
Dim clientSocket As TcpClient
Dim counter As Integer = 0
serverSocket.Start()
Msg("Server started.")
While (True)
counter += 1
clientSocket = serverSocket.AcceptTcpClient()
Dim bytesFrom(10024) As Byte
Dim dataFromClient As String
Dim networkStream As NetworkStream = clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClient = Encoding.ASCII.GetString(bytesFrom)
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
clientsList(dataFromClient) = clientSocket
Msg(dataFromClient & "joined the server.")
Dim client as new handleClient
client.startClient(clientSocket, dataFromClient, clientsList)
End While
When I attempt to connect the client, the server throws this
I do not understand why this is happening. Any assistance would be greatly appreciated.
This is not correct:
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
ReceiveBufferSize
represents the internal buffer size used by the TCP socket, you're not supposed to use that in your code (there's also no need to call CInt()
, as it is already an Integer).
You already have your own buffer, which's length you are supposed to specify:
networkStream.Read(bytesFrom, 0, bytesFrom.Length)
The third parameter indicates the maximum number of bytes that you can receive in one Read()
call. Obviously this can't exceed your buffer's length, which is why you need to give it exactly that (or a smaller value, if you want to read a more specific amount of bytes).
这篇关于RecieveBufferSize OutOfRangeException(.NET)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!