| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 688 人关注过本帖
标题:聊天程序运行后出现“未将对象引用设置到对象实例”错误,怎么改,源代码如 ...
只看楼主 加入收藏
梁旭礼
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-6-30
收藏
 问题点数:0 回复次数:0 
聊天程序运行后出现“未将对象引用设置到对象实例”错误,怎么改,源代码如下
服务器端

using System;
using System.Drawing;
using System.Collections;
using
using System.Windows.Forms;
using System.Data;

using System.Threading;
using
using

namespace Chat_Server
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public partial class Form1 : System.Windows.Forms.Form
 {
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private components = null;

  //static int listenport=6666;
  Socket clientsocket;
  private System.Windows.Forms.ListBox lbClients=null;
  ArrayList clients;
  private System.Windows.Forms.Button button1;
  Thread clientservice;
  private System.Windows.Forms.Label label1;
  Thread threadListen;

  public Form1()
  {
  
   InitializeComponent();

  }

  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
 // protected override void Dispose( bool disposing )
//  {
 //  if( disposing )
  // {
   
  //  if(clientservice != null)
  //  {
  //   clientservice.Abort();
  //  }
  //  if(threadListen != null)
  //  {
   //  try
  //   {
  //    threadListen.Abort();
  //   }
  //   catch(Exception ex)
  //   {
  //    threadListen = null;
  //   }
  //  }   

  //  if (components != null)
  //  {
   //  components.Dispose();
   // }
 // }
  // base.Dispose( disposing );
  
 //}
 [STAThread]
 static void Main()
 {
     Application.Run(new Form1());
 }

 private void StartListening()
 {
     //TcpListener listener = new TcpListener(listenport);
     IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];
     TcpListener listener = new TcpListener(ipAddress,6666);
     listener.Start();
     label1.Text = "listening....";
     while (true)
     {
         try
         {

             Socket s = listener.AcceptSocket();
             clientsocket = s;
             clientservice = new Thread(new ThreadStart(ServiceClient));
             clientservice.Start();
         }
         catch (Exception ex)
         {
             MessageBox.Show("listening Error: " + ex.Message);
         }
     }
 }
 private void ServiceClient()
 {
     Socket client = clientsocket;
     bool keepalive = true;


     while (keepalive)
     {
         Byte[] buffer = new Byte[1024];
         int bufLen = 0;
         try
         {
             bufLen = client.Available;

             client.Receive(buffer, 0, bufLen, SocketFlags.None);
             if (bufLen == 0)
                 continue;
         }
         catch (Exception ex)
         {
             MessageBox.Show("Receive Error:" + ex.Message);
             return;
         }

         string clientcommand = System.Text.Encoding.ASCII.GetString(buffer).Substring(0, bufLen);

         string[] tokens = clientcommand.Split(new Char[] { '|' });
         Console.WriteLine(clientcommand);

         if (tokens[0] == "CONN")
         {
             for (int n = 0; n < clients.Count; n++)
             {
                 Client cl = (Client)clients[n];
                 SendToClient(cl, "JOIN|" + tokens[1]);
             }
             EndPoint ep = client.RemoteEndPoint;
             Client c = new Client(tokens[1], ep, clientservice, client);

             string message = "LIST|" + GetChatterList() + "\r\n";
             SendToClient(c, message);

             clients.Add(c);


             lbClients.Items.Add(c);


         }
         if (tokens[0] == "CHAT")
         {
             for (int n = 0; n < clients.Count; n++)
             {
                 Client cl = (Client)clients[n];
                 SendToClient(cl, clientcommand);
             }
         }
         if (tokens[0] == "PRIV")
         {
             string destclient = tokens[3];
             for (int n = 0; n < clients.Count; n++)
             {
                 Client cl = (Client)clients[n];
                 if (cl.(tokens[3]) == 0)
                     SendToClient(cl, clientcommand);
                 if (cl.(tokens[1]) == 0)
                     SendToClient(cl, clientcommand);
             }
         }
         if (tokens[0] == "GONE")
         {
             int remove = 0;
             bool found = false;
             int c = clients.Count;
             for (int n = 0; n < clients.Count; n++)
             {
                 Client cl = (Client)clients[n];
                 SendToClient(cl, clientcommand);
                 if (cl.(tokens[1]) == 0)
                 {
                     remove = n;
                     found = true;
                     lbClients.Items.Remove(cl);
                 }
             }
             if (found)
                 clients.RemoveAt(remove);
             client.Close();
             keepalive = false;
         }
     }
 }

 private string GetChatterList()
 {
     string result = "";

     for (int i = 0; i < clients.Count; i++)
     {
         result += ((Client)clients[i]).Name + "|";
     }
     return result;

 }

 private void SendToClient(Client cl, string clientCommand)
 {
     Byte[] message = System.Text.Encoding.ASCII.GetBytes(clientCommand);
     Socket s = cl.Sock;
     if (s.Connected)
     {
         s.Send(message, message.Length, 0);
     }
 }

 private void Form1_Load(object sender, System.EventArgs e)
 {
     clients = new ArrayList();
 }

 private void button1_Click(object sender, System.EventArgs e)
 {
     threadListen = new Thread(new ThreadStart(StartListening));
     threadListen.Start();
 }
}
}

//using System;
//using System.Threading;

namespace Chat_Server
{
 using
 using

 ///
 /// Client 的摘要说明。
 ///
 public class Client
 {
  private Thread clthread;
  private EndPoint endpoint;
  private string name;
  private Socket sock;

  public Client(string _name, EndPoint _endpoint, Thread _thread, Socket _sock)
  {
   // TODO: 在此处添加构造函数逻辑
   clthread = _thread;
   endpoint = _endpoint;
  
   sock = _sock;
  }

  public override string ToString()
  {
   return endpoint.ToString()+ " : " + name;
  }

  public Thread CLThread
  {
   get{return clthread;}
   set{clthread = value;}
  }

  public EndPoint Host
  {
   get{return endpoint;}
   set{endpoint = value;}
  }

  public string Name
  {
   get{return name;}
   set{name = value;}
  }

  public Socket Sock
  {
   get{return sock;}
   set{sock = value;}
  }
 }
}



客户端



using System;
using System.Drawing;
using System.Collections;
using
using System.Windows.Forms;
using System.Data;

using
using
using
using System.Threading;

namespace Chat_Client
{
    /// <summary>
    /// Form1 的摘要说明。
    /// </summary>
    public partial class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.CheckBox checkBox1;
        private System.Windows.Forms.StatusBar statusBar1;

        NetworkStream ns;
        StreamReader sr;
        TcpClient clientsocket;
        bool connected;
        Thread receive;
        string serveraddress = "202.118.9.221 ";
        int serverport = 6666;

        private System.Windows.Forms.RichTextBox rtbChatIn;
        private System.Windows.Forms.ListBox lbChatters;
        private System.Windows.Forms.TextBox ChatOut;
        private System.Windows.Forms.Button btnDisconnect;
        private System.Windows.Forms.Button btnSend;
        private System.Windows.Forms.TextBox clientName;

        string clientname;
        private System.Windows.Forms.Button btnConnect;

        private components=null;

        public Form1()
        {

            InitializeComponent();

        }

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (receive != null)
                {
                    QuitChat();
                }
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码
        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponents()
        {
            this.lbChatters = new System.Windows.Forms.ListBox();
            this.rtbChatIn = new System.Windows.Forms.RichTextBox();
            this.checkBox1 = new System.Windows.Forms.CheckBox();
            this.ChatOut = new System.Windows.Forms.TextBox();
            this.btnSend = new System.Windows.Forms.Button();
            this.statusBar1 = new System.Windows.Forms.StatusBar();
            this.btnDisconnect = new System.Windows.Forms.Button();
            this.clientName = new System.Windows.Forms.TextBox();
            this.btnConnect = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // lbChatters
            //
            this.lbChatters.ItemHeight = 12;
            this.lbChatters.Location = new System.Drawing.Point(32, 40);
            this.lbChatters.Name = "lbChatters";
            this.lbChatters.Size = new System.Drawing.Size(112, 172);
            this.lbChatters.TabIndex = 0;
            //
            // rtbChatIn
            //
            this.rtbChatIn.Location = new System.Drawing.Point(160, 40);
            this.rtbChatIn.Name = "rtbChatIn";
            this.rtbChatIn.Size = new System.Drawing.Size(208, 176);
            this.rtbChatIn.TabIndex = 2;
            this.rtbChatIn.Text = "";
            //
            // checkBox1
            //
            this.checkBox1.Location = new System.Drawing.Point(16, 248);
            this.checkBox1.Name = "checkBox1";
            this.checkBox1.TabIndex = 3;
            this.checkBox1.Text = "checkBox1";
            //
            // ChatOut
            //
            this.ChatOut.Location = new System.Drawing.Point(136, 248);
            this.ChatOut.Name = "ChatOut";
            this.ChatOut.Size = new System.Drawing.Size(136, 21);
            this.ChatOut.TabIndex = 4;
            this.ChatOut.Text = "message";
            //
            // btnSend
            //
            this.btnSend.Location = new System.Drawing.Point(336, 248);
            this.btnSend.Name = "btnSend";
            this.btnSend.TabIndex = 5;
            this.btnSend.Text = "send";
            this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
            //
            // statusBar1
            //
            this.statusBar1.Location = new System.Drawing.Point(0, 287);
            this.statusBar1.Name = "statusBar1";
            this.statusBar1.Size = new System.Drawing.Size(464, 22);
            this.statusBar1.TabIndex = 6;
            this.statusBar1.Text = "statusBar1";
            //
            // btnDisconnect
            //
            this.btnDisconnect.Enabled = false;
            this.btnDisconnect.Location = new System.Drawing.Point(392, 112);
            this.btnDisconnect.Name = "btnDisconnect";
            this.btnDisconnect.Size = new System.Drawing.Size(64, 32);
            this.btnDisconnect.TabIndex = 7;
            this.btnDisconnect.Text = "断开";
            this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
            //
            // clientName
            //
            this.clientName.Location = new System.Drawing.Point(96, 8);
            this.clientName.Name = "clientName";
            this.clientName.TabIndex = 8;
            this.clientName.Text = "name";
            //
            // btnConnect
            //
            this.btnConnect.Location = new System.Drawing.Point(392, 56);
            this.btnConnect.Name = "btnConnect";
            this.btnConnect.Size = new System.Drawing.Size(64, 32);
            this.btnConnect.TabIndex = 9;
            this.btnConnect.Text = "连接";
            this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            this.ClientSize = new System.Drawing.Size(464, 309);
            this.Controls.Add(this.btnConnect);
            this.Controls.Add(this.clientName);
            this.Controls.Add(this.btnDisconnect);
            this.Controls.Add(this.statusBar1);
            this.Controls.Add(this.btnSend);
            this.Controls.Add(this.ChatOut);
            this.Controls.Add(this.checkBox1);
            this.Controls.Add(this.rtbChatIn);
            this.Controls.Add(this.lbChatters);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void EstablishConnection()
        {
            statusBar1.Text = "正在连接到服务器";

            try
            {
                clientsocket = new TcpClient(serveraddress, serverport);
                ns = clientsocket.GetStream();
                sr = new StreamReader(ns);
                connected = true;

            }
            catch (Exception)
            {
                MessageBox.Show("不能连接到服务器!", "错误",
                 MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                statusBar1.Text = "已断开连接";
            }
        }

        private void RegisterWithServer()
        {
            lbChatters.Items.Clear();

            clientname = clientName.Text;
            try
            {
                string command = "CONN|" + clientname; //+"\r\n";
                Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray());
                ns.Write(outbytes, 0, outbytes.Length);


                string serverresponse = sr.ReadLine();
                serverresponse.Trim();
                string[] tokens = serverresponse.Split('|');
                if (tokens[0] == "LIST")
                {
                    statusBar1.Text = "已连接";
                    btnDisconnect.Enabled = true;
                }
                if (tokens[1] != "")
                {
                    for (int n = 1; n < tokens.Length; n++)
                        lbChatters.Items.Add(tokens[n].Trim(new char[] { '\r', '\n' }));
                }
                this.Text = clientname + ":已连接到服务器";

            }
            catch (Exception ex)
            {
                MessageBox.Show("注册时发生错误!" + ex.Message, "错误",
                 MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                connected = false;
            }
        }

        private void ReceiveChat()
        {
            bool keepalive = true;
            while (keepalive)
            {
                try
                {
                    Byte[] buffer = new Byte[1024];  // 2048???
                    ns.Read(buffer, 0, buffer.Length);
                    string chatter = System.Text.Encoding.ASCII.GetString(buffer);
                    string[] tokens = chatter.Split(new Char[] { '|' });

                    if (tokens[0] == "CHAT")
                    {
                        rtbChatIn.AppendText(tokens[1]);
                        //      if(logging)
                        //       logwriter.WriteLine(tokens[1]);
                    }
                    if (tokens[0] == "PRIV")
                    {
                        rtbChatIn.AppendText("Private from ");
                        rtbChatIn.AppendText(tokens[1].Trim());
                        rtbChatIn.AppendText(tokens[2] + "\r\n");
                        //      if(logging)
                        //      {
                        //       logwriter.Write("Private from ");
                        //       logwriter.Write(tokens[1].Trim() );
                        //       logwriter.WriteLine(tokens[2] + "\r\n");
                        //      }
                    }
                    if (tokens[0] == "JOIN")
                    {
                        rtbChatIn.AppendText(tokens[1].Trim());
                        rtbChatIn.AppendText(" has joined the Chat\r\n");
                        //      if(logging)
                        //      {
                        //       logwriter.WriteLine(tokens[1]+" has joined the Chat");
                        //      }
                        string newguy = tokens[1].Trim(new char[] { '\r', '\n' });
                        lbChatters.Items.Add(newguy);
                    }
                    if (tokens[0] == "GONE")
                    {
                        rtbChatIn.AppendText(tokens[1].Trim());
                        rtbChatIn.AppendText(" has left the Chat\r\n");
                        //      if(logging)
                        //      {
                        //       logwriter.WriteLine(tokens[1]+" has left the Chat");
                        //      }
                        lbChatters.Items.Remove(tokens[1].Trim(new char[] { '\r', '\n' }));
                    }
                    if (tokens[0] == "QUIT")
                    {
                        ns.Close();
                        clientsocket.Close();
                        keepalive = false;
                        statusBar1.Text = "服务器端已停止";
                        connected = false;
                        btnSend.Enabled = false;
                        btnDisconnect.Enabled = false;
                    }
                }
                catch (Exception) { }
            }
        }

        private void QuitChat()
        {
            if (connected)
            {
                try
                {
                    string command = "GONE|" + clientname;
                    Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray());
                    ns.Write(outbytes, 0, outbytes.Length);
                    clientsocket.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            //   if(logging)
            //    logwriter.Close();
            if (receive != null && receive.IsAlive)
                receive.Abort();
            this.Text = "客户端";

            connected = false;

        }

        private void btnSend_Click(object sender, System.EventArgs e)
        {
            if (connected)
            {
                try
                {
                    string command = "CHAT|" + clientname + ": " + ChatOut.Text + "\r\n";
                    Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray());
                    ns.Write(outbytes, 0, outbytes.Length);
                    //clientsocket.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void btnConnect_Click(object sender, System.EventArgs e)
        {
            EstablishConnection();
            RegisterWithServer();
            if (connected)
            {
                receive = new Thread(new ThreadStart(ReceiveChat));
                receive.Start();
            }
        }

        private void btnDisconnect_Click(object sender, System.EventArgs e)
        {
            QuitChat();
        }
    }
}
搜索更多相关主题的帖子: 源代码 实例 对象 运行 
2010-07-01 16:38
快速回复:聊天程序运行后出现“未将对象引用设置到对象实例”错误,怎么改,源代 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035529 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved