Указанный аргумент находится вне диапазона допустимых значений. Имя параметра: размер

Я очень новичок в любом типе сетей с программированием. При попытке создать простую программу сервера сокетов я получаю следующую ошибку:

Указанный аргумент находится вне диапазона допустимых значений.
Имя параметра: размер

Вот мой код для сервера:

class Program
{
    private static IPAddress localServerIP = IPAddress.Parse("10.114.130.223");
    private static TcpListener serverSocket;
    private static TcpClient clientSocket;

    private static int requestCount = 0;

    static void Main(string[] args)
    {
        serverSocket = new TcpListener(localServerIP, 8888);
        clientSocket = default(TcpClient);

        serverSocket.Start();
        Console.WriteLine(" >> Server Started\n");
        clientSocket = serverSocket.AcceptTcpClient();
        Console.WriteLine(" >> Accept connection from client");
        requestCount = 0;

        while (true)
        {
            try
            {
                requestCount++;
                NetworkStream networkStream = clientSocket.GetStream();
                byte[] dataBuffer = new byte[10025];
                networkStream.Read(dataBuffer, 0, (int)clientSocket.ReceiveBufferSize);

                string dataFromClient = Encoding.ASCII.GetString(dataBuffer);
                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.Message);
            }

        }

    }
}

А это мой клиент

public partial class Form1 : Form
{

    private TcpClient clientSocket;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        msg("Client Started");
        clientSocket = new TcpClient();
        try
        {
            clientSocket.Connect(IPAddress.Parse("10.114.130.223"), 8888);
        }
        catch
        {
            textBox1.AppendText(" >> Server unavailable\n");
        }
        statusLabel.Text = "Client Socket Program - Server Connected";
    }

    private void sendBtn_Click(object sender, EventArgs e)
    {
        NetworkStream serverStream = clientSocket.GetStream();
        byte[] outStream = Encoding.ASCII.GetBytes(textBox2.Text + "$");
        serverStream.Write(outStream, 0, outStream.Length);
        serverStream.Flush();

        byte[] inStream = new byte[10025];
        serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
        string returnData = Encoding.ASCII.GetString(inStream);
        msg(returnData);
        textBox2.Text = "";
        textBox2.Focus();

    }

    public void msg(string mesg)
    {
        textBox1.Text = textBox1.Text + Environment.NewLine + " >> " + mesg;
    }
}

Любая помощь или руководство или объяснение будет принята с благодарностью.


person paul    schedule 07.10.2016    source источник
comment
Какая строка вызывает исключение?   -  person Chris Dunaway    schedule 07.10.2016


Ответы (1)


Это либо из

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

или из

dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));

Прочитайте документы для Исключения NetworkStream.Read и для исключения подстроки.

person Andrei Epure is hiring    schedule 07.10.2016