如何修复"检测到无法访问的代码"错误?

时间:2015-07-17 07:24:55

标签: c#

我为多个客户端连接编写了一个服务器程序,我在一个方法中遇到了上述错误。我尝试了一些选项,如" #pragma warning disable"但它不起作用。请给我建议解决这个问题。在while循环之后错误是粗体,如果我删除" clientSocket.close()"和" serverSocket.Stop()"错误没有显示,但我需要在这里写这些语句。 谢谢 !

这是我的代码,

  public void startServer()
  {
     int port = Convert.ToInt32(txtport.Text);
     string ipaddre = getip();
     IPAddress iP = IPAddress.Parse(ipaddre);
     TcpListener serverSocket = new TcpListener(iP, port);
     TcpClient clientSocket = default(TcpClient);
     int counter = 0;
     serverSocket.Start();
     AppendTxtdata("Server Started , Waiting for Client Connection");
     counter = 0;
    #pragma warning disable

     while (true)
     {
            counter += 1;
           clientSocket = serverSocket.AcceptTcpClient();
           AppendTxtdata(" >> " + "Client No:" + Convert.ToString(counter) + " Connected-- IP -                "+clientSocket.Client.RemoteEndPoint.ToString()+"");
           AppendTxtdata(Environment.NewLine);
           handleClient client = new connectSuccess.handleClient();
           client.startClient(clientSocket, Convert.ToString(counter));
     }
      **AppendTxtdata("Data sent to Client No :" + Convert.ToString(counter));**
     clientSocket.Close();
     serverSocket.Stop();
     AppendTxtdata(" >> " + "exit");
     #pragma warning restore
 }

3 个答案:

答案 0 :(得分:11)

您的while循环永远不会中断,因此无法在语义上达到代码。以某种方式打破循环:手动使用break或有条件地使用while(someConditionThatChangesInFuture)

警告来自编译器或其他工具(例如ReSharper)分析代码并且无法找到循环的可能方法。

听起来您也将警告视为错误。如果是这样,我会与您的同行谈论此事,要求进行代码审查。禁用警告不是轻易做到的事。

答案 1 :(得分:3)

您可以添加条件变量,以便控制while循环何时中断,而不是使用无限循环。只有当你的循环中断时,循环下面的代码才会到达。

下面是如何向代码中添加条件变量以及如何利用它来控制服务器状态的示例。

private bool IsRunning = false;

public void StartServer()
{
    int port = Convert.ToInt32(txtport.Text);
    string ipaddre = getip();
    IPAddress iP = IPAddress.Parse(ipaddre);
    TcpListener serverSocket = new TcpListener(iP, port);
    TcpClient clientSocket = default(TcpClient);
    int counter = 0;
    serverSocket.Start();
    AppendTxtdata("Server Started , Waiting for Client Connection");
    counter = 0;

    IsRunning = true;

    while (IsRunning)
    {
        counter += 1;
        clientSocket = serverSocket.AcceptTcpClient();
        AppendTxtdata(" >> " + "Client No:" + Convert.ToString(counter) + " Connected" + clientSocket.Client.RemoteEndPoint.ToString()+"");
        AppendTxtdata(Environment.NewLine);
        handleClient client = new connectSuccess.handleClient();
        client.startClient(clientSocket, Convert.ToString(counter));
     }
      **AppendTxtdata("Data sent to Client No :" + Convert.ToString(counter));**
     clientSocket.Close();
     serverSocket.Stop();
     AppendTxtdata(" >> " + "exit");
 }

public void StopServer()
{
    IsRunning = false;
}

答案 2 :(得分:1)

修复警告的方法是修复代码,而不是尝试隐藏问题。你有一个永不退出的while循环:

while (true)
{
    //true will always be true and there's no break
}
// Code here can never be reached.

因此,要么删除无法访问的代码,要么修复循环,以便以某种方式结束。