当前位置: 首页>>代码示例>>C#>>正文


C# Socket.InvokeAsyncMethod方法代码示例

本文整理汇总了C#中Socket.InvokeAsyncMethod方法的典型用法代码示例。如果您正苦于以下问题:C# Socket.InvokeAsyncMethod方法的具体用法?C# Socket.InvokeAsyncMethod怎么用?C# Socket.InvokeAsyncMethod使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Socket的用法示例。


在下文中一共展示了Socket.InvokeAsyncMethod方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Connect

        /// <summary>
        /// Connects to the remote socket.
        /// </summary>
        /// <returns>Returns SocketError.Success when connection was successful or the socket was already connected or returns another SocketError when something went wrong.</returns>
        public void Connect()
        {
            if (SocketAsyncEventArgs != null)
                return;

            #if !SILVERLIGHT
                Trace.WriteLine("Starting to connect to: " + Host);
            #endif

            _receiveRepository = new StringBuilder();
            _lastCommandResponse = null;
            Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) {ReceiveBufferSize = RECEIVE_BUFFER_SIZE};

            IPAddress ipV4;

            if (!IPAddress.TryParse(Host, out ipV4))
            {
            #if SILVERLIGHT
                RemoteEndPoint = new DnsEndPoint(Host, Port);
            #else
                IPHostEntry hostEntry = Dns.GetHostEntry(Host);

                if (hostEntry.AddressList.Length == 0)
                    throw new InvalidOperationException(string.Format("Could not resolve host: {0}", Host));

                ipV4 = hostEntry.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);

                if (ipV4 == null)
                    throw new InvalidOperationException("Could not find a network device with an ip-v4-address.");

                RemoteEndPoint = new IPEndPoint(ipV4, Port);
            #endif
            }
            else
                RemoteEndPoint = new IPEndPoint(ipV4, Port);

            _greetingReceived = false;
            SocketAsyncEventArgs = new SocketAsyncEventArgs {RemoteEndPoint = RemoteEndPoint, UserToken = new SocketAsyncEventArgsUserToken {Socket = Socket}};
            Socket.InvokeAsyncMethod(Socket.ConnectAsync, Client_Connected, SocketAsyncEventArgs);
        }
开发者ID:Mr0Cake,项目名称:TeamspeakTTS,代码行数:44,代码来源:AsyncTcpDispatcher.cs

示例2: Connect

        /// <summary>
        /// Connects to the remote socket.
        /// </summary>
        /// <returns>Returns SocketError.Success when connection was successful or the socket was already connected or returns another SocketError when something went wrong.</returns>
        public void Connect()
        {
            if (SocketAsyncEventArgs != null)
                return;

            #if !SILVERLIGHT
                Trace.WriteLine("Starting to connect to: " + Host);
            #endif

            Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) { ReceiveBufferSize = RECEIVE_BUFFER_SIZE };

            IPAddress ipV4;

            if (!IPAddress.TryParse(Host, out ipV4))
            {
            #if SILVERLIGHT
                RemoteEndPoint = new DnsEndPoint(Host, Port);
            #else
                IPHostEntry hostEntry = Dns.GetHostEntry(Host);

                if (hostEntry.AddressList.Length == 0)
                    throw new InvalidOperationException(string.Format("Could not resolve host: {0}", Host));

                ipV4 = hostEntry.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);

                if (ipV4 == null)
                    throw new InvalidOperationException("Could not find a network device with an ip-v4-address.");

                RemoteEndPoint = new IPEndPoint(ipV4, Port);
            #endif
            }
            else
                RemoteEndPoint = new IPEndPoint(ipV4, Port);

            SocketAsyncEventArgs = new SocketAsyncEventArgs { RemoteEndPoint = RemoteEndPoint, UserToken = new SocketAsyncEventArgsUserToken { Socket = Socket } };
            ManualResetEvent connectLock = new ManualResetEvent(false);
            SocketError result = SocketError.Success;
            EventHandler<SocketAsyncEventArgs> connectCallback = (sender, args) => { result = args.SocketError; connectLock.Set(); };
            Socket.InvokeAsyncMethod(Socket.ConnectAsync, connectCallback, SocketAsyncEventArgs);
            connectLock.WaitOne();
            SocketAsyncEventArgs.Completed -= connectCallback;

            if (result != SocketError.Success)
            {
                Disconnect();
                throw new SocketException((int) result);
            }

            string greeting = string.Empty;

            while (true)
            {
                KeyValuePair<SocketError, string> receiveResult = ReceiveMessage(SocketAsyncEventArgs);

                if (receiveResult.Key != SocketError.Success)
                {
                    Disconnect();
                    throw new SocketException((int) receiveResult.Key);
                }

                greeting = string.Concat(greeting, receiveResult.Value);

                if (!IsValidGreetingPart(greeting))
                    GreetingFailed(greeting);

                QueryType? queryType = GetQueryTypeFromGreeting(greeting);

                if (!queryType.HasValue)
                    continue;

                int requiredGreetingLength = queryType == QueryType.Client ? CLIENT_GREETING.Length : SERVER_GREETING.Length;

                if (greeting.Length < requiredGreetingLength)
                    continue;

                bool greetingCorrect;
                switch (queryType.Value)
                {
                    case QueryType.Client:
                        greetingCorrect = HandleClientQueryGreeting(greeting);
                        break;
                    case QueryType.Server:
                        greetingCorrect = HandleServerQueryGreeting(greeting);
                        break;
                    default:
                        throw new InvalidOperationException("Forgott to implement query type: " + queryType);
                }

                if (!greetingCorrect)
                    GreetingFailed(greeting);

                break;
            }
        }
开发者ID:Mr0Cake,项目名称:TeamspeakTTS,代码行数:98,代码来源:SyncTcpDispatcher.cs


注:本文中的Socket.InvokeAsyncMethod方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。