【问题标题】:Specified argument was out of range C#指定的参数超出范围 C#
【发布时间】:2014-07-10 17:55:55
【问题描述】:

我是 C# 的新手,所以我不知道为什么在 Windows 7 中我的应用程序(程序)运行良好,而在 Windows Server 2012 上,当我尝试从客户端获取消息时出现此错误。 C#。

错误:

system.argumentOutOfRangeException:指定的参数超出了有效值的范围。参数名称:尺寸。 在 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

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

【问题讨论】:

  • clientSocket.ReceiveBufferSize的值是多少?
  • 我不知道,我不改...

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


【解决方案1】:

我现在只需要处理 TCP 套接字,我找到了这个示例代码,并得到了相同的错误消息。我在网上搜索了一下,结果如下:

改变这个:

networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);

进入这个:

networkStream.Read(bytesFrom, 0, bytesFrom.Length);

如果您在客户端遇到类似的错误,只需检查相同的.Read() 部分。应用与使用.Length 属性相同的解决方案。

【讨论】:

    【解决方案2】:

    你为什么要投

    clientSocket.ReceiveBufferSize
    

    通常应该已经是 int 的 int? (http://msdn.microsoft.com/de-de/library/system.net.sockets.socket.receivebuffersize(v=vs.110).aspx)?

    还有多大的尺寸

    byteFrom
    

    已初始化?它至少应该是 ReceiveBufferSize 的值。但请确保值在初始化 Read() 之间不会发生变化。

    【讨论】:

    • byte[] bytesFrom = new byte[10025];
    • 您使用的是默认的 ReceiveBufferSize 还是您更改/增加了它?如果你做了你把它增加到什么?
    • 不,我不改变它。因为我不知道在哪里......它的默认值。
    • 这是一系列cmets,不是答案(因为此时问题无法回答)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多