socket的BeginConnect(EndPoint remoteEP,AsyncCallback callback,objcet state);个人理解

本文介绍了C#中socket的BeginConnect()方法,用于异步连接远程服务器。该方法接收一个EndPoint参数指定服务器地址,并在新的线程中启动异步操作。在回调委托中使用EndConnect()结束连接,实现并发发送和接收数据。欢迎指出不足之处进行讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.socket.BeginConnect();

  其中的三个参数值EndPoint remoteEP,这个是用来指定连接的socket服务器的的地址

socket参数表
EndPoint remoteEP这个的参数用来指定socket所连接的服务器的地址,一般包含的信息有,IP地址+端口号Point
AsyncCallback callback这个参数指定一个异步的委托来请求socket服务器,并执行.
objcet state用来指定异步请求委托的参数

 

 

 

 

 

 

 

 

 

 

 

public static void AsynConnect(string json, string ip, int port)
        {
            try
            {
                timeoutObject = new ManualResetEvent(false);
                sendstr = json;
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(ip), port);
                client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


                client.BeginConnect(ipe, new AsyncCallback(CallBackMethod), client);

                if (!timeoutObject.WaitOne(5000, false))
                {
                    client.Close();
                }
            }
            catch (Exception ex)
            {

            }
        }

        public static void CallBackMethod(IAsyncResult asyncresult)
        {
            try
            {
                client = asyncresult.AsyncState as Socket;
                if (client != null)
                {
                    client.EndConnect(asyncresult);
                    AsynSend(client, sendstr);
                    AsynRecive(client);

                }
            }
            catch (Exception e)
            {

            }
            finally
            {
                timeoutObject.Set();
            }
        }

       
        public static void AsynSend(Socket socket, string message)
        {
            if (socket == null || message == string.Empty) return;
            //编码  
            byte[] data = Encoding.UTF8.GetBytes(message);
            try
            {
                socket.BeginSend(data, 0, data.Length, SocketFlags.None, asyncResult =>
                {
                    int length = socket.EndSend(asyncResult);
                    // Console.WriteLine(string.Format("客户端发送消息:{0}", message));
                }, null);
            }
            catch (Exception ex)
            {
                
            }
        }

        static string receicestr = "";
      
        public static void AsynRecive(Socket socket)
        {
            byte[] data = new byte[1024];
            try
            {

              
                socket.BeginReceive(data, 0, data.Length, SocketFlags.None,
                asyncResult =>
                {
                    int length = socket.EndReceive(asyncResult);
                    receicestr += Encoding.UTF8.GetString(data);
                    AsynRecive(socket);
                }, null);
            }
            catch (Exception ex)
            {
               
            }
        }

按照我的理解是,先创建一个socket连接对象,开启BeginConnect()连接的同时,开启一个新的线程用来走

传入的异步委托,在委托中调用EndConnect(),方法来来让阻塞的线程往下走并同时进行了发送消息和接受

消息两个操作,

 

 

 

第一篇随笔可能语言逻辑和信息不太完整和严谨,如果有错误的地方和不严谨的地方请在下方回复我,我将及时改正

 

转载于:https://www.cnblogs.com/yujunxiaobai/p/10529151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值