程序代码  
 
using  System;  
using  System.Drawing;  
using  System.Collections;  
using  System.ComponentModel;  
using  System.Windows.Forms;  
using  System.Data  ;  
using  System.Net.Sockets  ;  
using  System.IO  ;  
using  System.Threading  ;  
using  System.Net  ;  
 namespace  Server  
{  
           public  class  Form1  :  Form  
           {  
     
                       private  ListBox  ListBox1  ;  
                       private  Button  button2  ;  
                       private  Label  label1  ;  
                       private  TextBox  textBox1  ;  
                       private  Button  button1  ;  
                       private  Socket  socketForClient;  
                       private  NetworkStream  networkStream  ;  
                       private  TcpListener  tcpListener;  
                       private  StreamWriter  streamWriter=null  ;  
                       private  StreamReader  streamReader=null  ;  
                       private  Thread  _thread1;  
                       private  System.Windows.Forms.Button  button3;  
                       private  System.ComponentModel.Container  components  =  null;  
 
                                            private  void  Listen  (  )  
                       {  
                                   //创建一个tcpListener对象,此对象主要是对给定端口进行侦听  
                                   tcpListener  =  new  TcpListener  (  1234  )  ;  
                                   //开始侦听  
                                   tcpListener.Start  (  )  ;  
                                   //返回可以用以处理连接的Socket实例  
                                   socketForClient  =  tcpListener.AcceptSocket  (  )  ;  
                                   try  
                                   {  
                                               //如果返回值是"true",则产生的套节字已经接受来自远方的连接请求  
                                               if  (  socketForClient.Connected  )  
                                               {  
                                                           ListBox1.Items.Add  (  "已经和客户端成功连接!"  )  ;  
                                                           while  (  true  )  
                                                           {  
                                                                       //创建networkStream对象通过网络套节字来接受和发送数据  
                                                                       networkStream  =  new  NetworkStream  (  socketForClient,true)  ;  
                                                                       //从当前数据流中读取一行字符,返回值是字符串  
                                                                       streamReader  =  new  StreamReader  (  networkStream  )  ;  
                                                                       string  msg  =  streamReader.ReadLine  (  )  ;  
                                                                       ListBox1.Items.Add  (  "收到客户端信息:"  +  msg  )  ;  
                                                                       streamWriter  =  new  StreamWriter  (  networkStream  )  ;  
                                                                       if  (  textBox1.Text  !=  ""  )  
                                                                       {  
                                                                                   ListBox1.Items.Add  (  "往客户端反馈信息:"  +  textBox1.Text  )  ;  
                                                                                   //往当前的数据流中写入一行字符串  
                                                                                   streamWriter.WriteLine  (  textBox1.Text  )  ;  
                                                                                   //刷新当前数据流中的数据  
                                                                                   streamWriter.Flush  (  )  ;  
                                                                       }  
                                                           }  
                                               }  
                                   }  
                                   catch  (  Exception  ey  )  
                                   {  
                                               MessageBox.Show  (  ey.ToString  (  )  )  ;  
                                   }  
                       }  
 
                     
 
                       private  void  Form1_Closed(object  sender,  System.EventArgs  e)  
                       {  
                                   this.networkStream.Close  (  )  ;  
                                   streamReader.Close  (  )  ;  
                                   streamWriter.Close  (  )  ;  
                                   _thread1.Abort  (  )  ;  
                                   tcpListener.Stop  (  )  ;  
                                   socketForClient.Shutdown(  SocketShutdown.Both  )  ;  
                                   socketForClient.Close  ()  ;  
                       }  
 
                       private  void  button1_Click(object  sender,  System.EventArgs  e)  
                       {  
                                   ListBox1.Items  .Add  (  "服务已经启动!"  )  ;  
                                   _thread1  =  new  Thread  (  new  ThreadStart  (  Listen  )  )  ;  
                                   _thread1.Start  (  )  ;  
                       }  
 
 
 
 
           }  
}  
------------------------  
this.networkStream.Close  (  )  ;  
                                   streamReader.Close  (  )  ;  
                                   streamWriter.Close  (  )  ;  
                                   _thread1.Abort  (  )  ;  
                                   tcpListener.Stop  (  )  ;  
                                   socketForClient.Shutdown(  SocketShutdown.Both  )  ;  
                                   socketForClient.Close  ()  ;  
这几行总是提示“未将对象引用设置到对象的实例”  请高手帮帮忙

解决方案 »

  1.   

    private  void  Form1_Closed(object  sender,  System.EventArgs  e)  
                           {  
    if (networkStream == null) return;
                                       this.networkStream.Close  (  )  ;  
                                       streamReader.Close  (  )  ;  
                                       streamWriter.Close  (  )  ;  
                                       _thread1.Abort  (  )  ;  
                                       tcpListener.Stop  (  )  ;  
                                       socketForClient.Shutdown(  SocketShutdown.Both  )  ;  
                                       socketForClient.Close  ()  ;  
                           }  
      

  2.   

    你关闭的顺序有误,对于网络编程,关闭的时候大致顺序如下
    首先,关闭线程;
    其次,关闭线程所牵扯的资源(除socket外);
    然后,关闭socket资源;
    最后关闭tcp资源。
    此外关闭的时候,需要判断各个资源是否有效。
      

  3.   

    先感谢各位了,回复第一楼,如果加了if (networkStream == null) return;,程序关闭后没有报错,可是任务栏进程没有关闭应该怎么解决???????