程序采用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^)/~