温馨提示×

c# beginreceive怎么用

c#
小樊
82
2024-12-04 08:08:54
栏目: 编程语言

BeginReceive是C#中用于异步接收数据的方法,通常与Socket类一起使用。以下是一个简单的示例,说明如何使用BeginReceive来接收数据:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个TCP套接字
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // 连接到远程服务器
        IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
        int port = 12345;
        socket.Connect(ipAddress, port);

        // 发送数据到远程服务器
        string message = "Hello, Server!";
        byte[] sendBytes = Encoding.ASCII.GetBytes(message);
        socket.Send(sendBytes);

        // 开始异步接收数据
        socket.BeginReceive(new byte[1024], 0, 1024, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);

        // 等待用户输入,以便在接收到数据之前不会退出程序
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();

        // 关闭套接字
        socket.Shutdown(SocketShutdown.Both);
        socket.Close();
    }

    static void ReceiveCallback(IAsyncResult ar)
    {
        // 获取套接字实例
        Socket socket = (Socket)ar.AsyncState;

        // 结束异步接收操作
        int bytesReceived = socket.EndReceive(ar);

        // 将接收到的数据转换为字符串
        string receivedMessage = Encoding.ASCII.GetString(socket.ReceiveBuffer, 0, bytesReceived);

        // 输出接收到的数据
        Console.WriteLine("Received from server: " + receivedMessage);

        // 再次开始异步接收数据
        socket.BeginReceive(new byte[1024], 0, 1024, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
    }
}

在这个示例中,我们首先创建一个TCP套接字并连接到远程服务器。然后,我们发送一条消息到服务器。接下来,我们使用BeginReceive方法开始异步接收数据。当接收到数据时,ReceiveCallback方法将被调用。在这个方法中,我们将接收到的数据转换为字符串并输出。最后,我们再次调用BeginReceive以便继续接收数据。

0