应该用 sokect做吧  我下过简单的例子,这个你可以去网上或MSDN搜搜挺多

解决方案 »

  1.   

    错CSDN 呵呵 资源还是挺多的
      

  2.   

    刚做了一个QQ的即时聊天,还没修改完善,看看有没有帮助
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;namespace MyQQ
    {
        public partial class ChatForm : Form
        {
            public static MainForm mainForm;
            
            private int FromUserID = 10009;//发送信息的 id
                                    //即  好友的信息 和昵称
            private int ToUserID = 10000;// 接受信息的id usrhelper.loginid
                                 //即  本人的信息 和昵称       
            public ChatForm()
            {
                InitializeComponent();
            }
            public ChatForm(int fromUserID)
            {
                InitializeComponent();
                this.FromUserID = fromUserID;
            }
            ///取消事件当点击是 关闭窗口 不发送信息
            private void btnKExit_Click(object sender, EventArgs e)
            {
                this.Close();
            }
            ///发送 事件 将 信息插入数据库  
             private void btnShow_Click(object sender, EventArgs e)
            {
                if (rtbToText.Text=="")
                {
                    MessageBox.Show("不能发送空消息");
                }
                else
                {
                int result=-1;
                 string sql = string.Format("insert into Messages(FromUserId, ToUserId, Message, MessageTypeId, MessageState, MessageTime)values({0},{1},'{2}',1,0,'{3}')", FromUserID, ToUserID, this.rtbToText.Text, (DateTime.Now).ToString());
                SqlCommand coom = new SqlCommand(sql,DBHelper.conn);
                DBHelper.conn.Open();
                result = coom.ExecuteNonQuery();
                DBHelper.conn.Close();
                this.rtbToText.Clear();
                // 常用语句选中后的 发送的显示
                this.cboMess.SelectedIndex = 0;
                }
                
                
            }
           //id 的链接的“_”的 字符串
            string messageIdStr="";        ///初始化 当窗体 打开的 时候加载信息
            ///
            private void ChatForm_Load(object sender, EventArgs e)
            {
                // 常用语句的默认显示
                this.cboMess.SelectedIndex = 0;
                //读取 未读信息 并修改成已读    
                MessageShow();
            }
            ///  加入时间  信息   where 是否 已读 信息类型(好友) 接受的用户 和 发送的用户
            ///收存 ID 对消息的 状态进行 修改
           
            private void MessageShow()
            {
                //调试中 类型 不再 搜索 语句 and MessageState=0 
                string sql = string.Format("select Id,Message, MessageTime from Messages where MessageTypeId=1and MessageState=0  and FromUserId={0} and ToUserId ={1}", ToUserID, FromUserID);
                SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
                SqlDataReader dataReader;            try
                {
                    DBHelper.conn.Open();
                    dataReader = comm.ExecuteReader();
                    while (dataReader.Read())
                    {
                        //消息的id
                        messageIdStr = messageIdStr + Convert.ToString(dataReader["Id"]) + "_";
                        //消息的时间
                        string messageTime = Convert.ToDateTime(dataReader["MessageTime"]).ToString();
                        //消息的内容哦
                        string message = dataReader["Message"].ToString();
                        //消息的 输出
                        txtFriMess.Text = txtFriMess.Text + "\r\t"+"\r\n" + messageTime + "\r\n" + message;
                    }
                    dataReader.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    DBHelper.conn.Close();
                }            if (!(messageIdStr.Length < 1))
                {
                    MessState(comm);     //  修改 信息类型            }
                
            }
            ///修改数据类型改成 已读
            ///
            private void MessState(SqlCommand comm)
            {            //将 id的尾部 “_” 去掉
                messageIdStr.Remove(messageIdStr.Length - 1);
                //将 id 装入字符串的 数组中
                string[] messageIds = messageIdStr.Split('_');
                // sql 语句
                string sqlId = "update Messages set MessageState=1 where id=";
                string updataSql;
                //执行数据库的 命令
                try
                {
                    //数据库的链接方法
                    comm.Connection = DBHelper.conn;
                    DBHelper.conn.Open();
                    foreach (string id in messageIds)
                    {
                        if (id != "")
                        {
                            updataSql = sqlId + id;
                            //数据库 链接语句
                            comm.CommandText = updataSql;
                            //执行语句
                            int result = comm.ExecuteNonQuery();
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    DBHelper.conn.Close();
                }
            }
            /// 定时 刷新 聊天列表进行更改 
            ///
            private void tmrUpdate_Tick(object sender, EventArgs e)
            {
                int i =1;
                i++;
                string sql;//sql 语句 
                if ((i%1) ==0)
                {
                    //好友发送的信息 到 本人处
                    sql = string.Format("select Id,Message, MessageTime from Messages where (MessageTypeId=1 or MessageTypeId=3)and MessageState=0  and FromUserId={0} and ToUserId ={1}", FromUserID, ToUserID);
                }
                else
                {
                    // 本人发送的信息 到好友处
                    sql = string.Format("select Id,Message, MessageTime from Messages where(MessageTypeId=1 or MessageTypeId=3)and MessageState=0  and FromUserId={0} and ToUserId ={1}", ToUserID, FromUserID);
                }
                
                SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
                SqlDataReader dataReader;            try
                {
                    DBHelper.conn.Open();
                    dataReader = comm.ExecuteReader();
                    while (dataReader.Read())
                    {
                        //消息的id
                        messageIdStr = messageIdStr + Convert.ToString(dataReader["Id"]) + "_";
                        //消息的时间
                        string messageTime = Convert.ToDateTime(dataReader["MessageTime"]).ToString();
                        //消息的内容哦
                        string message = dataReader["Message"].ToString();
                        //消息的 输出
                        txtFriMess.Text = txtFriMess.Text +"\r\t"+ "\r\n" + messageTime + "\r\n" + message;
                    }
                    dataReader.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    DBHelper.conn.Close();
                }
                if (!(messageIdStr.Length < 1))
                {
                    MessState(comm);     //  修改 信息类型
                }
                //检查 对方的抖动信息 MessageTypeId=3
                //调用方法
                JianChaDD(comm);
           }            }
    }