c#写的次QQ聊天室

一,服务器端
1,声明3大对象
   StreamReader sr;//实现一个 TextReader,使其以一种特定的编码从字节流
中读取字符。
   StreamWriter sw;//实现一个 TextWriter,使其以一种特定的编码向流中写入
字符。
   NetworkStream NS;//提供用于网络访问的基础数据流;
   NS作为一个基础数据流为客户端和服务器端提供网络数据交流
2,声明进程对象,用来接收启动方法;
3,定义启动方法也就是【监视】
4,【监视】:声明TcpListener对象用来指明要监视服务器的IP,和该服务器
的端口范围【服务器端口可以有多个,只要客户端的端口属于服务器的端口就可
以连到服务器,当然IP也是要对的】
 TcpListener tl = new TcpListener(IPAddress.Parse(IP_TB.Text), int.Parse
(Point_TB.Text));//端口是本地端口???
            tl.Start();
5,【监视】:声明客户端 TcpClient tc = tl.AcceptTcpClient();由服务器来接
收客户端(为TCP网络服务提供客户端连接)
,获取客户端数据流传给媒介NS;
,读写对象sr,sw,与NS关联 :
sr = new StreamReader(NS);//把NS中的数据返回给sr或者说是sr读取了NS中
的数据为49行做铺垫;
 sw = new StreamWriter(NS);
,关联完之后就该判断客户端是否说话了用一个while循环一直来判断客户
端是否说话{当然基本的异常处理是必须的}
try
            {
                while (true)
                {
                    string con = sr.ReadLine();//承接43行;
                    if (con.Trim() != "")
                    {
                        Old_TB.Text += DateTime.Now.ToString() + "\r\n";
                        Old_TB.Text += "客户端说:" + con + "\r\n";
                    }
                }
            }
            catch (Exception e)
            {
                Old_TB.Text = e.Message;
                tc.Close();
            }
,接下来处理服务器端响应客户端发送的信息【回信】
sw = new StreamWriter(NS);
            sw.WriteLine(New_TB.Text);
            sw.Flush();//清除当前编写器的所有缓冲区并使所有缓冲数据写入基础数
据流;
            ××.Text += DateTime.Now.ToString() + "\r\n";
            ××.Text += ××.Text + "\r\n";
二,客户端【跟服务器端差不多,这里只给出代码】
namespace TcpClient2//客户端
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread ClientTh = new Thread(ClientCon);
            ClientTh.Start();
        }
        StreamReader sr;
        StreamWriter sw;
        NetworkStream NS;
        void ClientCon()
        {
            TcpClient tc = new TcpClient(IP_TB.Text, int.Parse
(Point_TB.Text));//找到服务器的IP
            NS = tc.GetStream();
            sr = new StreamReader(NS);
            sw = new StreamWriter(NS);
            try
            {
                while (true)//相当于客户端和服务器都在不停的读NS中的内容有的话
也就是对方发内容到NS的话就用43行读下来(自己发内容到NS体现在62行)
                {
                    string con = sr.ReadLine();
                    if (con.Trim() != "")
                    {
                       ××.Text += DateTime.Now.ToString() + "\r\n";
                       ××.Text += "服务端说:" + con + "\r\n";
                    }
                }
            }
            catch(Exception e)
            {
                ×××.Text = e.Message;
                tc.Close();
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            sw = new StreamWriter(NS);
            sw.WriteLine(×××.Text);
            sw.Flush();
            ××× += DateTime.Now.ToString() + "\r\n";
          ×××Text += ×××.Text + "\r\n";
            ×××.Clear();
        }
        private void Form1_FormClosed(object sender,
FormClosedEventArgs e)
        {
            Environment.Exit(0);
        }
    }
}

你可能感兴趣的:(职场,休闲,c#写的次QQ聊天室)