程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#編寫聊天程序系列筆記(一)原理

C#編寫聊天程序系列筆記(一)原理

編輯:C#入門知識

程序采用TCP協議,當然神馬是TCP協議呢,大家可以自行百度之。長話短說,為了C#方便使用TCP協議,在

using System.Net.Sockets;裡面使用TcpListener類簡化了TCP的服務器端操作,注意是服務器端,畢竟在服務器端我們才需要監聽。
我們只需要定義一個實體變量,這樣就可以進行服務器操作了。
當然TcpListener有兩個參數格式如下
public TcpListener(IPAddress localaddr,int port)  第一個參數表示本地的IP地址,第二個參數表示監聽的端口號
當我們設置好了之後,采用start()開始偵聽連接請求,如果收到連接請求,則start()對請求進行排隊,繼續監聽是否還有下一個請求,直到調用到stop方法為止。
當然stop方法就是關閉TcpListener並停止監聽。
程序中采用publi Socket AcceptSocket(),這個是一個阻塞的方法,當有客戶連接的時候返回一個socket實例,這樣就可以調用Send與Receive方法來發送消息
為了更加方便的傳輸數據,程序采用NetworkStream類來訪問網絡數據流。
當然前提就是創建一個NetworkStream的新實例,采用這個方法public NetworkStream(Socket socket)裡面參數socket就是用來發送數據的socket剛好結合上面的AcceptSocket就可以創建數據流了。
此時接收數據采用 StreamRead,發送數據采用StreamWrite,這樣就可以發送數據了。
好了,下面是程序中的部分代碼,幫助更好的理解
這是直接從程序復制的,有些參數可能用不上
定義參數
private TcpListener tcpListener;
        private NetworkStream[] netWorkStream;
        private StreamReader[] streamReader;
        private StreamWriter[] streamWriter;
        private Socket[] socketForClient;
        private int CurPort;
        private IPAddress CurIp;
開始監聽
 private void btnStratServer_Click(object sender, EventArgs e)
        {
            serverThread = new Thread(new ThreadStart(Listen));
            serverThread.Start();
 //           Listen();
        }


必要參數賦值
CurIp = IPAddress.Parse(txtIP.Text);
                CurPort = Convert.ToInt32(txtPort.Text);
                tcpListener = new TcpListener(CurIp, CurPort);
                //開始監聽
                tcpListener.Start();
                listInfo.Items.Add("服務器開始啟動");



監聽
 socketForClient[i] = tcpListener.AcceptSocket();



創建數據流
netWorkStream[i] = new NetworkStream(socketForClient[i]);
                        streamReader[i] = new StreamReader(netWorkStream[i]);
                        streamWriter[i] = new StreamWriter(netWorkStream[i]);
                        recvThread = new Thread(new ParameterizedThreadStart(RecvAndSendData));
                        recvThread.Start(i);



發送數據與接收數據示例
streamWriter[i].WriteLine("hahahahahah");
                        streamWriter[i].Flush();



string Pass = streamReader[i].ReadLine();
好了到現在基本上流程就實現了,還有問題的話私心我,可以發給源代碼研究\(^o^)/~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved