while(socket.IsConnected == true)
  {
    ……
      Byte[] buffer=new Byte[1024];
    Client_Socket.Receive(buffer,buffer.Length,0);
    ……
  } FormClosing事件:
{
socket.SutDown(Both);
socket.Close();
}
应该可用

解决方案 »

  1.   

    线程调用 Abort 方法始终会抛出 ThreadAbortException
    解决方法就是必须加上try代码块.
      

  2.   

    为什么会出现那个问题?
    “您的主机中的软件放弃了一个已建立的连接! ”
    调试的时候我发现始终是
     Client_Socket.Receive(buffer,buffer.Length,0); 
    这一句出现错误!
    是上面原因?OnClosed事件中的
    Client_Socket.close() 语句不能正常执行??
    可是我不想让它弹出这些信息,怎么办?
    而且我发现在OnClosed事件中的一些其他的语句也没有执行
    (我在OnClosed事件刚开始执行的时候向服务器发送退出指令,但调试时在服务器并没有接收到,为什么呢?在不关闭的时候客户端和服务器能正常通信!)
    请教……
      

  3.   

    socket已经close了,receive当然会报错.或者再receive之前加上对IsConnected的判断.
      

  4.   

    在我的程序中
    Private Void ReceivedFormServer() 

      while(true) 
      { 
        if(Client_Socket.Connected)
        {
        …… 
         Byte[] buffer=new Byte[1024]; 
        Client_Socket.Receive(buffer,buffer.Length,0); 
        ……
         } 
      } 

    我已经判断了,但是Socket的Connected属性为 获取一个值,用来表示上一次执行send或receive操作是否成功连接到远程主机,
    你应该是说的Connected吧,没有你说的IsConnected
      

  5.   

    楼上bingzhuyue是我们办公室的同事的,也是我发的,
    还有问题就是.我在服务器端定义了一个arraylist数组,用来存在每一个新连接的客户端的信息,我刚才调试了,发现在服务器端当接收到客户端退出时发送的数据后,在arraylist中检索,找到相应的客户端后,执行与之相对应的客户端的socket、thread 关闭和释放操作,都会出现错误,就是执行完语句后没反应!!
    如:cl.Clien_Socket.close();
        cl.Client_Thread.Abort();
        MessageBox.show("aa");
    就不能弹出aa的信息,也就是程序执行到上面两句后就没了反映!
    什么原因??还有一个问题就是,我想把服务器和客户端都做成随系统启动自动运行的,同时不希望有界面,相应的数据存在数据库中,另外有控制台可以查看和操作,现在想把服务器和客户端做成没界面,也就是没有Form界面,该怎么做???
      

  6.   

    SOCK的Connected属性好像与我们想的不一样;线程中使用的是阻塞式的套接字,当不能接收到数据时,会一直陷入Receive函数而不会跳出;建议改为判断是否有数据接收,如果有则接收
      

  7.   

    同样的问题,我也遇到过!close方法只是释放资源,基础连接并没有关闭
    可以用shutdown方法
      

  8.   

    shutdown的属性格式为:
    socket.Shutdown(SocketShutdown how)
    我写成
    socket.Shutdown(SocketShutdown.Both)
    执行完这条语句还是有错误!