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);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章