C# 服务端监听客户端连接
生活随笔
收集整理的這篇文章主要介紹了
C# 服务端监听客户端连接
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需要建立兩個工程:一個客戶端、一個服務端
//服務端測試代碼 using System; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; using System.Collections; namespace SimpleServer {class Program{static void Main(string[] args){IpType();}private static void IpType(){//IP地址IPAddress ipaddr = IPAddress.Parse("127.0.0.1");IPEndPoint endPoint = new IPEndPoint(ipaddr, 33678);Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//綁定連接,一定要在監聽之前socket.Bind(endPoint);//開始監聽,最大支持同時5個連接socket.Listen(5);while(true){//如果未檢測到連接,將阻塞,不再繼續執行Socket clientSocket = socket.Accept();byte[] data = new byte[512];//第一次握手,接收到數據確認鏈接成功clientSocket.Receive(data, 0, data.Length, SocketFlags.Partial);string s = System.Text.Encoding.Default.GetString(data);Console.WriteLine(s.Split('\0')[0]);//啟動新線程處理客戶端的連接信息Task.Factory.StartNew(() =>{reciiveFromClient(clientSocket);});}}private static void reciiveFromClient(Socket client){byte[] data;try{while (true){//第二次握手,告訴客戶端,服務端已準備好client.Send(System.Text.Encoding.Default.GetBytes("GoOn"));data = new byte[512];//第三次握手,接受數據client.Receive(data, SocketFlags.None);string str = System.Text.Encoding.Default.GetString(data);//創建隊列Queue clientQ = new Queue();if (clientQ.Equals(data))//判斷數據是否已在隊列中,如果不在先添加進隊列{}else{//往對列添加數據clientQ.Enqueue(data);}if (str.StartsWith("_quit")){//如果檢測到_quit,關閉連接client.Close();Console.WriteLine("連接關閉");break;}else{//控制臺打印數據string info = str.Split('\0')[0];Console.WriteLine("From Client :" + info);}}} catch(SocketException e){//處理異常}}} }//客戶端測試代碼 using System; using System.Net; using System.Net.Sockets; namespace SimpleClient {class Program{static void Main(string[] args){while(true){Client();//關閉連接后可提示繼續連接Console.WriteLine("End Client");Console.WriteLine("是否繼續?是[Y]/否[N]");string ss = Console.ReadLine();if(!(ss == "Y" || ss == "y")){break;}}}private static void Client(){//指定要連接的服務器IP,本機是127.0.0.1IPAddress ip = IPAddress.Parse("127.0.0.1");//端口號EndPoint ep = new IPEndPoint(ip, 33678);Socket client = new Socket(SocketType.Stream, ProtocolType.Tcp);//連接到指定主機client.Connect(ep);string s = "Hello, Server";byte[] data = System.Text.Encoding.Default.GetBytes(s);//第一次握手,告訴服務器我已經連接client.Send(data, SocketFlags.Partial);while (true){//第二次握手,確認服務端已準備好client.Receive(data);//第三次握手,從鍵盤讀取數據string info = Console.ReadLine();//轉換數據類型data = System.Text.Encoding.Default.GetBytes(info);//傳輸數據到服務器client.Send(data);if (info.StartsWith("_quit")){break;}}//關閉連接client.Close();}} }轉載于:https://my.oschina.net/CarrieLiu/blog/1576658
總結
以上是生活随笔為你收集整理的C# 服务端监听客户端连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Saas免费开源充电桩平台
- 下一篇: 加密通讯元年:Signal下载量暴增42