中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中如何實現異步套接字

發布時間:2021-08-06 15:27:50 來源:億速云 閱讀:150 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關C#中如何實現異步套接字,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

創建一個連接到服務器的客戶端。該客戶端是用C#異步套接字生成的,因此在等待服務器返回響應時不掛起客戶端應用程序的執行。該應用程序將字符串發送到服務器,然后在控制臺顯示該服務器返回的字符串。

using System;   using System.Net;   using System.Net.Sockets;   using System.Threading;   using System.Text;   // State object for receiving data from remote device.   public class StateObject {   // Client socket.   public Socket workSocket = null;   // Size of receive buffer.   public const int BufferSize = 256;   // Receive buffer.   public byte[] buffer = new byte[BufferSize];   // Received data string.   public StringBuilder sb = new StringBuilder();   }   public class AsynchronousClient {   // The port number for the remote device.   private const int port = 11000;   // ManualResetEvent instances signal completion.   private static ManualResetEvent connectDone =   new ManualResetEvent(false);   private static ManualResetEvent sendDone =   new ManualResetEvent(false);   private static ManualResetEvent receiveDone =   new ManualResetEvent(false);   // The response from the remote device.   private static String response = String.Empty;   private static void StartClient() {   // Connect to a remote device.   try {   // Establish the remote endpoint for the socket.   // The name of the   // remote device is "host.contoso.com".   IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com");   IPAddress ipAddress = ipHostInfo.AddressList[0];   IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);   // Create a TCP/IP socket.   Socket client = new Socket(AddressFamily.InterNetwork,   SocketType.Stream, ProtocolType.Tcp);   // Connect to the remote endpoint.   client.BeginConnect( remoteEP,   new AsyncCallback(ConnectCallback), client);   connectDone.WaitOne();   // Send test data to the remote device.   Send(client,"This is a test<EOF>");   sendDone.WaitOne();   // Receive the response from the remote device.   Receive(client);   receiveDone.WaitOne();   // Write the response to the console.   Console.WriteLine("Response received : {0}", response);   // Release the socket.   client.Shutdown(SocketShutdown.Both);   client.Close();   } catch (Exception e) {   Console.WriteLine(e.ToString());   }   }   private static void ConnectCallback(IAsyncResult ar) {   try {   // Retrieve the socket from the state object.   Socket client = (Socket) ar.AsyncState;   // Complete the connection.   client.EndConnect(ar);   Console.WriteLine("Socket connected to {0}",   client.RemoteEndPoint.ToString());   // Signal that the connection has been made.   connectDone.Set();   } catch (Exception e) {   Console.WriteLine(e.ToString());   }   }   private static void Receive(Socket client) {   try {   // Create the state object.   StateObject state = new StateObject();   state.workSocket = client;   // Begin receiving the data from the remote device.   client.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,   new AsyncCallback(ReceiveCallback), state);   } catch (Exception e) {   Console.WriteLine(e.ToString());   }   }   private static void ReceiveCallback( IAsyncResult ar ) {   try {   // Retrieve the state object and the client socket   // from the asynchronous state object.   StateObject state = (StateObject) ar.AsyncState;   Socket client = state.workSocket;   // Read data from the remote device.   int bytesRead = client.EndReceive(ar);   if (bytesRead > 0) {   // There might be more data, so store the data received so far.    state.sb.Append(Encoding.ASCII.GetString(  state.buffer,0,bytesRead));   // Get the rest of the data.   client.BeginReceive(state.buffer,0,StateObject.BufferSize,0,   new AsyncCallback(ReceiveCallback), state);   } else {   // All the data has arrived; put it in response.   if (state.sb.Length > 1) {   response = state.sb.ToString();   }   // Signal that all bytes have been received.   receiveDone.Set();   }   } catch (Exception e) {   Console.WriteLine(e.ToString());   }   }   private static void Send(Socket client, String data) {   // Convert the string data to byte data using ASCII encoding.   byte[] byteData = Encoding.ASCII.GetBytes(data);   // Begin sending the data to the remote device.   client.BeginSend(byteData, 0, byteData.Length, 0,   new AsyncCallback(SendCallback), client);   }   private static void SendCallback(IAsyncResult ar) {   try {   // Retrieve the socket from the state object.   Socket client = (Socket) ar.AsyncState;   // Complete sending the data to the remote device.   int bytesSent = client.EndSend(ar);   Console.WriteLine("Sent {0} bytes to server.", bytesSent);   // Signal that all bytes have been sent.   sendDone.Set();   } catch (Exception e) {   Console.WriteLine(e.ToString());   }   }   public static int Main(String[] args) {   StartClient();   return 0;   }   }

C#異步套接字在服務器的示例 下面的示例程序創建一個接收來自客戶端的連接請求的服務器。該服務器是用C#異步套接字生成的

因此在等待來自客戶端的連接時不掛起服務器應用程序的執行。該應用程序接收來自客戶端的字符串

在控制臺顯示該字符串,然后將該字符串回顯到客戶端。來自客戶端的字符串必須包含字符串“<EOF>”

以發出表示消息結尾的信號。

using System;   using System.Net;   using System.Net.Sockets;   using System.Text;   using System.Threading;   // State object for reading client data asynchronously   public class StateObject {   // Client socket.   public Socket workSocket = null;   // Size of receive buffer.   public const int BufferSize = 1024;   // Receive buffer.   public byte[] buffer = new byte[BufferSize];   // Received data string.   public StringBuilder sb = new StringBuilder();   }   public class AsynchronousSocketListener {   // Thread signal.   public static ManualResetEvent allDone =   new ManualResetEvent(false);   public AsynchronousSocketListener() {   }   public static void StartListening() {   // Data buffer for incoming data.   byte[] bytes = new Byte[1024];   // Establish the local endpoint for the socket.   // The DNS name of the computer   // running the listener is "host.contoso.com".   IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());   IPAddress ipAddress = ipHostInfo.AddressList[0];   IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);   // Create a TCP/IP socket.   Socket listener = new Socket(AddressFamily.InterNetwork,   SocketType.Stream, ProtocolType.Tcp );   // Bind the socket to the local   //endpoint and listen for incoming connections.   try {   listener.Bind(localEndPoint);   listener.Listen(100);   while (true) {   // Set the event to nonsignaled state.   allDone.Reset();   // Start an asynchronous socket to listen for connections.   Console.WriteLine("Waiting for a connection...");   listener.BeginAccept(   new AsyncCallback(AcceptCallback),   listener );   // Wait until a connection is made before continuing.   allDone.WaitOne();   }   } catch (Exception e) {   Console.WriteLine(e.ToString());   }   Console.WriteLine("\nPress ENTER to continue...");   Console.Read();   }   public static void AcceptCallback(IAsyncResult ar) {   // Signal the main thread to continue.   allDone.Set();   // Get the socket that handles the client request.   Socket listener = (Socket) ar.AsyncState;   Socket handler = listener.EndAccept(ar);   // Create the state object.   StateObject state = new StateObject();   state.workSocket = handler;   handler.BeginReceive( state.buffer,   0, StateObject.BufferSize, 0,   new AsyncCallback(ReadCallback), state);   }   public static void ReadCallback(IAsyncResult ar) {   String content = String.Empty;   // Retrieve the state object and the handler socket   // from the asynchronous state object.   StateObject state = (StateObject) ar.AsyncState;   Socket handler = state.workSocket;   // Read data from the client socket.   int bytesRead = handler.EndReceive(ar);   if (bytesRead > 0) {   // There might be more data, so store the data received so far.   state.sb.Append(Encoding.ASCII.GetString(   state.buffer,0,bytesRead));   // Check for end-of-file tag. If it is not there, read   // more data.   content = state.sb.ToString();   if (content.IndexOf("<EOF>") > -1) {   // All the data has been read from the   // client. Display it on the console.   Console.WriteLine("Read {0} bytes from socket. \n Data : {1}",   content.Length, content );   // Echo the data back to the client.   Send(handler, content);   } else {   // Not all data received. Get more.   handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,   new AsyncCallback(ReadCallback), state);   }   }   }   private static void Send(Socket handler, String data) {   // Convert the string data to byte data using ASCII encoding.   byte[] byteData = Encoding.ASCII.GetBytes(data);   // Begin sending the data to the remote device.   handler.BeginSend(byteData, 0, byteData.Length, 0,   new AsyncCallback(SendCallback), handler);   }   private static void SendCallback(IAsyncResult ar) {   try {   // Retrieve the socket from the state object.   Socket handler = (Socket) ar.AsyncState;   // Complete sending the data to the remote device.   int bytesSent = handler.EndSend(ar);   Console.WriteLine("Sent {0} bytes to client.", bytesSent);   handler.Shutdown(SocketShutdown.Both);   handler.Close();   } catch (Exception e) {   Console.WriteLine(e.ToString());   }   }   public static int Main(String[] args) {   StartListening();   return 0;   }   }

關于C#中如何實現異步套接字就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瑞安市| 克拉玛依市| 迁安市| 页游| 泸定县| 城固县| 临沭县| 虹口区| 宽城| 聂拉木县| 全南县| 会宁县| 静宁县| 桦甸市| 澄江县| 静海县| 芦山县| 宁陕县| 红桥区| 安吉县| 南江县| 石阡县| 天气| 全椒县| 桂东县| 金昌市| 武功县| 唐海县| 区。| 平乐县| 肇庆市| 霍山县| 交城县| 客服| 唐河县| 广饶县| 南皮县| 桃园县| 浦北县| 嘉黎县| 台安县|