我做的客户端,下面是连接程序段
<code>
SocketClient.Shutdown(SocketShutdown.Both);
SocketClient.Close();
Thread.Sleep(100);while(!SocketClient.Connected)
{
try
{
SocketClient.Connect(remoteEP);
}
catch(Exception exc)
{
Log.WriteEntry("Connect to Server Error:" + exc.Message, EventLogEntryType.Error, 2);
}
Thread.Sleep(30 * 1000); //30s
}
</code>
问题是,如果网络断开后重连的话会提示错误,怎么也连不上,怎么解决,谢谢了

解决方案 »

  1.   

    断开的话重新socket()一个套接字
      

  2.   

    就是把这行代码加进去,每次连接都声明一下?
    Socket SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      

  3.   

    当网络断开时,在你的catch中
    Socket SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    试试看
      

  4.   

    现在的错误是
    Connect to Server Error:在一个已经连接的套接字上做了一个连接请求。
    昨天测试是什么对象之类的,忘了
      

  5.   

    呵呵,那就强制关闭以后再创建socket啊。
    SocketClient。Close();
    Socket SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      

  6.   

    我加了关闭了
    现在又有问题了
    我在运行程序,线程好像起不来了
    ThreadNetpoll = new Thread(new ThreadStart(TaskSendNetpoll));
    ThreadNetpoll.IsBackground = true;
    try
    {
    ThreadNetpoll.Start();
    }
    catch(Exception exc)
    {
    MessageBox.Show(exc.Message, "错误");
    this.Close();
    }MessageBox.Show(ThreadNetpoll.ThreadState.ToString());显示居然是backgroud, unstart
    我开始都运行了的
      

  7.   

    线程没运行的问题知道了,打印的时候确实是没运行
    下面是连接程序
    如果有注释的话可以连接
    如果去掉注释的话显示是连接了,但是我在另外的片断里调用Socket.Connected总是FALSE
    帮忙看看怎么改,谢谢
    public void Connect2Server()
    {
    IPAddress ipAddress = IPAddress.Parse(szSvrIPAddr);
    EndPoint remoteEP = new IPEndPoint(ipAddress, SvrPort);
    /*
    Socket SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); if (SocketClient.Connected)
    {
    SocketClient.Shutdown(SocketShutdown.Both);
    SocketClient.Close();
    Thread.Sleep(100);
    }
    */ while(!SocketClient.Connected)
    {
    try
    {
    SocketClient.Connect(remoteEP);
    }
    catch(Exception exc)
    {
    Log.WriteEntry("Connect to Server Error:" + exc.Message, EventLogEntryType.Error, 2);
    }
    Thread.Sleep(30 * 1000); //30s
    }
    }