本文整理汇总了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);
}
示例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;
}
}