2016-10-07 3 views
1

私はプログラミングを使ってどのような種類のネットワークにも新しくなっています。簡単なソケットサーバプログラムを作成しようとすると、私は次のエラーを取得する:ここで指定された引数が有効な値の範囲外です。パラメータ名:サイズ

Specified argument was out of the range of valid values.
Parameter name: size

は、サーバーの私のコードです:

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; 
    } 
} 

どれでも私のクライアントであります助けや指導、説明が大いに評価されます。

+1

例外をスローする行はどれですか? –

+0

[指定された引数の重複が有効な値の範囲外です。パラメータ名:サイズとシリアルポート通信](http://stackoverflow.com/questions/23697819/specified-argument-was-out-of-the-range-of-valid-values-parameter-name-size) –

答えて

2

それはどちらかだ

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

または

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

からNetworkStream.Read Exceptionsためとsubstring exceptionsのためのドキュメントを読んでから。

関連する問題