async private Task ConnectAsync(string User, string Password) { Socket = await TcpSocket.CreateAndConnectAsync("talk.google.com", 5222); bool Authenticated = false; while (true) { Console.WriteLine("--------------------------"); await Socket.WriteAsync("<stream:stream to='gmail.com' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' version='1.0'>"); //await Socket.ReadBytesAsync(138); Reader = XmlReader.Create(Socket.Stream, new XmlReaderSettings() { Async = true, ConformanceLevel = ConformanceLevel.Fragment }); await Reader.ReadAsync(); await Reader.ReadAsync(); Reader = Reader.ReadSubtree(); await Reader.ReadAsync(); var FeaturesXml = await WaitEndElementAsync("stream:features"); var starttls = FeaturesXml.OuterXml.Contains("starttls"); //Console.WriteLine("starttls: {0}", starttls); //Console.ReadKey(); if (starttls) { await Socket.WriteAsync("<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'><required /></starttls>"); await WaitEndElementAsync("proceed"); await Socket.SecureSslAsync("gmail.com"); Console.WriteLine("StartTLS"); } else if (!Authenticated) { await Socket.WriteAsync(String.Format("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>{0}</auth>", Convert.ToBase64String(Encoding.Default.GetBytes(String.Format("\0{0}\0{1}", User, Password))))); await WaitEndElementAsync("success"); Authenticated = true; } else { await Socket.WriteAsync(String.Format("<iq xmlns='jabber:client' type='set' id='1'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>{0}</resource></bind></iq>", "NodeNet")); var IqNode = await WaitEndElementAsync("iq"); Console.WriteLine(IqNode.OuterXml); Console.ReadKey(); return; } } }