C# Socket异步
时间: 2023-10-19 09:07:51 浏览: 111
c#socket 异步
C# 的 Socket 类库提供了异步操作的支持,这可以使我们更加高效地处理网络通信。在 Socket 类库中,异步操作包括异步发送和异步接收。
下面是一个简单的异步发送的示例代码:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class Program
{
static void Main(string[] args)
{
string hostname = "www.example.com";
int port = 80;
IPAddress[] ips = Dns.GetHostAddresses(hostname);
IPEndPoint remoteEP = new IPEndPoint(ips[0], port);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] sendData = Encoding.ASCII.GetBytes("Hello, world!");
clientSocket.BeginConnect(remoteEP, (result) =>
{
clientSocket.EndConnect(result);
clientSocket.BeginSend(sendData, 0, sendData.Length, SocketFlags.None, (sendResult) =>
{
int bytesSent = clientSocket.EndSend(sendResult);
Console.WriteLine("Sent {0} bytes to server.", bytesSent);
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}, null);
}, null);
Console.ReadLine();
}
}
```
在上面的代码中,我们创建了一个 Socket 对象,然后使用 BeginConnect 方法异步连接到远程主机。在连接完成后,我们使用 BeginSend 方法异步发送数据。发送完成后,我们关闭 Socket 对象。
需要注意的是,异步操作通常是通过回调函数来完成的,这些回调函数都是在另一个线程中执行的。因此,在使用异步操作时,需要特别注意线程安全问题。
阅读全文