指定的参数超出范围C#

时间:2014-05-21 21:34:35

标签: c# windows windows-7 windows-server-2012

我是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

如何解决这个问题,有什么想法吗?

2 个答案:

答案 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属性的相同解决方案。