我是C#的新手,所以我不知道为什么在Windows 7中我的应用程序(程序)完美运行并且在Windows Server 2012上我在尝试从客户端获取消息时出现此错误。 C#。
错误:
system.argumentOutOfRangeException:指定的参数超出了有效值的范围。参数名称:大小。 at system.net.sockets.networkStream.Read(Byte [] buffer,int32 offset,int32 size)
发送功能:
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox2.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
接收功能:
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
Console.WriteLine("From client - " + clNo + " : " + dataFromClient);
这一行有问题:
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
也许在这里:(int)clientSocket.ReceiveBufferSize
如何解决这个问题,有什么想法吗?
答案 0 :(得分:0)
为什么要施展
clientSocket.ReceiveBufferSize
到一个int,它通常应该已经是一个int? (http://msdn.microsoft.com/de-de/library/system.net.sockets.socket.receivebuffersize(v=vs.110).aspx)?
以及
的大小byteFrom
初始化?它应该至少是ReceiveBufferSize的值。但是请确保在初始化Read()之前该值不会改变。
答案 1 :(得分:0)
我现在只需要处理TCP套接字,我找到了这个示例代码,并得到了相同的错误消息。我搜索了网络,这是我发现的:
改变这个:
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
进入这个:
networkStream.Read(bytesFrom, 0, bytesFrom.Length);
如果您在客户端遇到类似错误,请检查同一.Read()
部分。应用使用.Length
属性的相同解决方案。