Utilisation de SOCKET :
public static ManualResetEvent ConnectDone = new ManualResetEvent(false);
public static void ConnectCallback(IAsyncResult ar)
{
Socket sClient = (Socket)ar.AsyncState;
sClient.EndConnect(ar);
Console.WriteLine("Socket connecté à {0}", sClient.RemoteEndPoint.ToString());
ConnectDone.Set();
}
public static void Main(string[] arg)
{
try
{
IPHostEntry ipHost = Dns.Resolve("127.0.0.1");
Adresse IP ipAddr = ipHost.AddressList[0];
IPEndPoint endPoint = new IPEndPoint(ipAddr, 11000);
Socket sClient = new Socket (AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
sClient.BeginConnect(endPoint, nouveau AsyncCallback(ConnectCallback),
sClient);
for (int i = 0; i <5; i++)
Console.WriteLine("Faire un autre travail.");
byte[] byteData = Encoding.ASCII.GetBytes("Quelques données.");
ConnectDone.WaitOne();
sClient.BeginSend(byteData, 0, byteData.Length, 0,
new AsyncCallback(SendCallback), sClient);
………
}
(注:ManualResetEvent )
Il s'agit d'un manuel d'utilisation ManualResetEvent. Il s'agit de Reset(), Set(), WaitOne().后,该对象将保持原来的状态不变直到它La fonction Reset() est définie par Set(), la fonction Reset() est définie par Set(), la fonction Set() est définie par WaitOne(). ManuelResetEvent信号状态,此时该线程将被激活。)
Il s'agit d'une connexion ConnectDone.WaitOne(); et d'une connexion ConnectDone.WaitOne(); Il s'agit de ConnectDone.Set(). Le manuel ManualResetEvent.WaitOne() est utilisé pour résoudre le problème.工作。
同步与异步:
简单地说,同步即程序执行一个方法,等该方法返回之后,继续往下走,
异步:即程序调用一个方法后立即返回,« 宏观 »而言,主线程与方法线程并行执行
。Pour
(int i = 0; i <5; i++)
Console.Write
Line("Faites-en d'autres Travail.");
byte[] byteData = Encoding.ASCII.GetBytes("Some Data."); "
Socket connecté à…"一定会在"Effectuer un autre travail."须"Faire un autre travail." Il s'agit de "Socket connecté à…" (实际情况还依赖于操作系统的线程
Il s'agit de sClient.BeginSend(…) et de ConnectDone.WaitOne().得同步一下
。