1、服務端代碼以下:數組
using System.Text; using System.Net.Sockets; using System.Net; using System; namespace Server { class Program { static void Main(string[] args) { StartOnSncyServer(); Console.ReadKey(); } static void StartOnSncyServer() { //建立一個服務端套接字Socket Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); //把服務端自己的IP設置爲通訊IP IPAddress ipAddress = IPAddress.Parse("192.168.1.101"); //設置端口號 IPEndPoint ipEndPoint = new IPEndPoint(ipAddress,88); //設置Bind端口號 serverSocket.Bind(ipEndPoint); //設置服務端監聽 serverSocket.Listen(0); //異步接受客戶端上線 serverSocket.BeginAccept(AcceptCallBack, serverSocket); } static byte[] dataBuffer = new byte[1024]; static void AcceptCallBack(IAsyncResult ar) { //根據參數獲取服務端套接字Socket Socket serverSocket = ar.AsyncState as Socket; //接收的客戶端套接字Socket Socket clientSocket = serverSocket.EndAccept(ar); string sendMessage = "歡迎連接,客戶端...."; byte[] sendMsg = Encoding.UTF8.GetBytes(sendMessage); //向客戶端發送信息 clientSocket.Send(sendMsg); //服務端異步接收信息 clientSocket.BeginReceive(dataBuffer,0,1024,SocketFlags.None, ReceiveCallBack,clientSocket); //異步接受客戶端上線 serverSocket.BeginAccept(AcceptCallBack, serverSocket); } static void ReceiveCallBack(IAsyncResult ar) { Socket clientSocket = null; try { clientSocket = ar.AsyncState as Socket; int count = clientSocket.EndReceive(ar); if (count == 0) { clientSocket.Close(); return; } string msg = Encoding.UTF8.GetString(dataBuffer, 0, count); Console.WriteLine("從客戶端接收到數據:" + msg); clientSocket.BeginReceive(dataBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket); } catch (Exception e) { Console.WriteLine(e); if (clientSocket != null) { clientSocket.Close(); } } } } }
2、客戶端代碼以下:異步
using System; using System.Text; using System.Net.Sockets; using System.Net; namespace Client { class Program { static void Main(string[] args) { //建立一個Socket套接字 Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //根據IP和端口號連接服務端 clientSocket.Connect(IPAddress.Parse("192.168.1.101"), 88); //接受數據的字節數組 byte[] byteReceive = new byte[1024]; //客戶端接收數據,返回一個接受數據的長度count int count = clientSocket.Receive(byteReceive); //根據UTF8把byte數組轉換成字符串 string ReceiveMsg = Encoding.UTF8.GetString(byteReceive, 0, count); Console.WriteLine(ReceiveMsg); while (true) { string str = Console.ReadLine(); //當我點擊c字符的時候,客戶端關閉,並return if (str == "c") { clientSocket.Close(); return; } //向服務端發送信息 clientSocket.Send(Encoding.UTF8.GetBytes(str)); } Console.ReadKey(); } } }