经过多次修复后,我仍然遇到一个严重的错误。我使用 VS2013
的开发人员命令提示符调试和运行我的服务器,并使用 VS 2013 运行客户端。
首先,我运行我的服务器没有任何问题,但是当我启动客户端时,将数据放入其中的文本框
并单击发送时出现问题。
这是服务器端处理问题的代码。
IPAddress ipaddr=IPAddress.Parse("127.0.0.1");
TcpListener serverSocket = new TcpListener(ipaddr,8002);
int requestCount = 0;
TcpClient clientSocket = default(TcpClient);
serverSocket.Start();
Console.WriteLine(" >> Server Started");
clientSocket = serverSocket.AcceptTcpClient();
Console.WriteLine(" >> Accept connection from client");
requestCount = 0;
while ((true))
{
try
{
requestCount = requestCount + 1;
NetworkStream networkStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[10025];
//issue stems out of here although i changed bytes size and tried too
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
Console.WriteLine(" >> Data from client - " + dataFromClient);
string serverResponse = "Last Message from client" + dataFromClient;
Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);
networkStream.Write(sendBytes, 0, sendBytes.Length);
networkStream.Flush();
Console.WriteLine(" >> " + serverResponse);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
clientSocket.Close();
serverSocket.Stop();
Console.WriteLine(" >> exit");
Console.ReadLine();
编辑:经过建议,我改变了:
byte[] bytesFrom = new byte[10025];
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);`
到
byte[] bytesFrom = new byte[clientSocket.ReceiveBufferSize];
networkStream.Read(bytesFrom, 0, bytesFrom.Length);
结果给出了屏幕截图,但没有收到来自客户端的数据。
错误(来自命令提示符):-
Parameter name:size at System.Net.Sockets.NetworkStream.Read(byte[] buffer,int offset,int size)
at Console.Application1.Prog.Main():
System Argument Out of Exception:Specified Argument was out of range of valid value.
他们实际上调用的有效值
是什么。
最佳答案
您应该将 receiveBuffer 大小指定为第三个参数,而不是 clientSocket.ReceiveBufferSize
networkStream.Read(bytesFrom, 0, bytesFrom.Length);
或者
使用 clientSocket.ReceiveBufferSize 创建缓冲区;
byte[] bytesFrom = new byte[clientSocket.ReceiveBufferSize];
networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
这是来自微软的示例:
while(true)
{
Console.Write("Waiting for a connection... ");
// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!");
data = null;
// Get a stream object for reading and writing
NetworkStream stream = client.GetStream();
int i;
// Loop to receive all the data sent by the client.
while((i = stream.Read(bytes, 0, bytes.Length))!=0)
{
// Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received: {0}", data);
// Process the data sent by the client.
data = data.ToUpper();
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
// Send back a response.
stream.Write(msg, 0, msg.Length);
Console.WriteLine("Sent: {0}", data);
}
// Shutdown and end connection
client.Close();
}
关于c# - System.Argument 出现异常 :Specified argument was out of range of valid value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27578650/