本文整理汇总了C#中System.Net.Security.NegotiateStream类的典型用法代码示例。如果您正苦于以下问题:C# NegotiateStream类的具体用法?C# NegotiateStream怎么用?C# NegotiateStream使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
NegotiateStream类属于System.Net.Security命名空间,在下文中一共展示了NegotiateStream类的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Main
//引入命名空间
using System;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Text;
namespace Examples.NegotiateStreamExample
{
public class ASynchronousAuthenticatingTcpClient
{
static TcpClient client = null;
public static void Main(String[] args)
{
// Establish the remote endpoint for the socket.
// For this example, use the local machine.
IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost");
IPAddress ipAddress = ipHostInfo.AddressList[0];
// Client and server use port 11000.
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);
// Create a TCP/IP socket.
client = new TcpClient();
// Connect the socket to the remote endpoint.
client.Connect(remoteEP);
Console.WriteLine("Client connected to {0}.", remoteEP.ToString());
// Ensure the client does not close when there is
// still data to be sent to the server.
client.LingerState = (new LingerOption(true, 0));
// Request authentication.
NetworkStream clientStream = client.GetStream();
NegotiateStream authStream = new NegotiateStream(clientStream, false);
// Pass the NegotiateStream as the AsyncState object
// so that it is available to the callback delegate.
IAsyncResult ar = authStream.BeginAuthenticateAsClient(
new AsyncCallback(EndAuthenticateCallback),
authStream
);
Console.WriteLine("Client waiting for authentication...");
// Wait until the result is available.
ar.AsyncWaitHandle.WaitOne();
// Display the properties of the authenticated stream.
AuthenticatedStreamReporter.DisplayProperties(authStream);
// Send a message to the server.
// Encode the test data into a byte array.
byte[] message = Encoding.UTF8.GetBytes("Hello from the client.");
ar = authStream.BeginWrite(message, 0, message.Length,
new AsyncCallback(EndWriteCallback),
authStream);
ar.AsyncWaitHandle.WaitOne();
Console.WriteLine("Sent {0} bytes.", message.Length);
// Close the client connection.
authStream.Close();
Console.WriteLine("Client closed.");
}
// The following method is called when the authentication completes.
public static void EndAuthenticateCallback (IAsyncResult ar)
{
Console.WriteLine("Client ending authentication...");
NegotiateStream authStream = (NegotiateStream) ar.AsyncState;
Console.WriteLine("ImpersonationLevel: {0}", authStream.ImpersonationLevel);
// End the asynchronous operation.
authStream.EndAuthenticateAsClient(ar);
}
// The following method is called when the write operation completes.
public static void EndWriteCallback (IAsyncResult ar)
{
Console.WriteLine("Client ending write operation...");
NegotiateStream authStream = (NegotiateStream) ar.AsyncState;
// End the asynchronous operation.
authStream.EndWrite(ar);
}
}
// The following class displays the properties of an authenticatedStream.
public class AuthenticatedStreamReporter
{
public static void DisplayProperties(AuthenticatedStream stream)
{
Console.WriteLine("IsAuthenticated: {0}", stream.IsAuthenticated);
Console.WriteLine("IsMutuallyAuthenticated: {0}", stream.IsMutuallyAuthenticated);
Console.WriteLine("IsEncrypted: {0}", stream.IsEncrypted);
Console.WriteLine("IsSigned: {0}", stream.IsSigned);
Console.WriteLine("IsServer: {0}", stream.IsServer);
}
}
}
示例2: Main
//引入命名空间
using System;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Authentication;
using System.Security.Principal;
using System.Text;
using System.IO;
using System.Threading;
namespace Examples.NegotiateStreamExample
{
public class AsynchronousAuthenticatingTcpListener
{
public static void Main()
{
// Create an IPv4 TCP/IP socket.
TcpListener listener = new TcpListener(IPAddress.Any, 11000);
// Listen for incoming connections.
listener.Start();
while (true)
{
TcpClient clientRequest = null;
// Application blocks while waiting for an incoming connection.
// Type CNTL-C to terminate the server.
clientRequest = listener.AcceptTcpClient();
Console.WriteLine("Client connected.");
// A client has connected.
try
{
AuthenticateClient (clientRequest);
}
catch (Exception e)
{
Console.WriteLine(e);
continue;
}
}
}
public static void AuthenticateClient(TcpClient clientRequest)
{
NetworkStream stream = clientRequest.GetStream();
// Create the NegotiateStream.
NegotiateStream authStream = new NegotiateStream(stream, false);
// Save the current client and NegotiateStream instance
// in a ClientState object.
ClientState cState = new ClientState(authStream, clientRequest);
// Listen for the client authentication request.
authStream.BeginAuthenticateAsServer (
new AsyncCallback(EndAuthenticateCallback),
cState
);
// Wait until the authentication completes.
cState.Waiter.WaitOne();
cState.Waiter.Reset();
authStream.BeginRead(cState.Buffer, 0, cState.Buffer.Length,
new AsyncCallback(EndReadCallback),
cState);
cState.Waiter.WaitOne();
// Finished with the current client.
authStream.Close();
clientRequest.Close();
}
// The following method is invoked by the
// BeginAuthenticateAsServer callback delegate.
public static void EndAuthenticateCallback (IAsyncResult ar)
{
// Get the saved data.
ClientState cState = (ClientState) ar.AsyncState;
TcpClient clientRequest = cState.Client;
NegotiateStream authStream = (NegotiateStream) cState.AuthenticatedStream;
Console.WriteLine("Ending authentication.");
// Any exceptions that occurred during authentication are
// thrown by the EndAuthenticateAsServer method.
try
{
// This call blocks until the authentication is complete.
authStream.EndAuthenticateAsServer(ar);
}
catch (AuthenticationException e)
{
Console.WriteLine(e);
Console.WriteLine("Authentication failed - closing connection.");
cState.Waiter.Set();
return;
}
catch (Exception e)
{
Console.WriteLine(e);
Console.WriteLine("Closing connection.");
cState.Waiter.Set();
return;
}
// Display properties of the authenticated client.
IIdentity id = authStream.RemoteIdentity;
Console.WriteLine("{0} was authenticated using {1}.",
id.Name,
id.AuthenticationType
);
cState.Waiter.Set();
}
public static void EndReadCallback(IAsyncResult ar)
{
// Get the saved data.
ClientState cState = (ClientState) ar.AsyncState;
TcpClient clientRequest = cState.Client;
NegotiateStream authStream = (NegotiateStream) cState.AuthenticatedStream;
// Get the buffer that stores the message sent by the client.
int bytes = -1;
// Read the client message.
try
{
bytes = authStream.EndRead(ar);
cState.Message.Append(Encoding.UTF8.GetChars(cState.Buffer, 0, bytes));
if (bytes != 0)
{
authStream.BeginRead(cState.Buffer, 0, cState.Buffer.Length,
new AsyncCallback(EndReadCallback),
cState);
return;
}
}
catch (Exception e)
{
// A real application should do something
// useful here, such as logging the failure.
Console.WriteLine("Client message exception:");
Console.WriteLine(e);
cState.Waiter.Set();
return;
}
IIdentity id = authStream.RemoteIdentity;
Console.WriteLine("{0} says {1}", id.Name, cState.Message.ToString());
cState.Waiter.Set();
}
}
// ClientState is the AsyncState object.
internal class ClientState
{
private AuthenticatedStream authStream = null;
private TcpClient client = null;
byte[] buffer = new byte[2048];
StringBuilder message = null;
ManualResetEvent waiter = new ManualResetEvent(false);
internal ClientState(AuthenticatedStream a, TcpClient theClient)
{
authStream = a;
client = theClient;
}
internal TcpClient Client
{
get { return client;}
}
internal AuthenticatedStream AuthenticatedStream
{
get { return authStream;}
}
internal byte[] Buffer
{
get { return buffer;}
}
internal StringBuilder Message
{
get
{
if (message == null)
message = new StringBuilder();
return message;
}
}
internal ManualResetEvent Waiter
{
get
{
return waiter;
}
}
}
}