以SOCKET-Fehler:
public static ManualResetEvent ConnectDone = new ManualResetEvent(false);
public static void ConnectCallback(IAsyncResult ar)
{
Socket sClient = (Socket)ar.AsyncState;
sClient.EndConnect(ar);
Console.WriteLine("Socket verbunden mit {0}", sClient.RemoteEndPoint.ToString());
ConnectDone.Set();
}
public static void Main(string[] arg)
{
try
{
IPHostEntry ipHost = Dns.Resolve("127.0.0.1");
IPAddress ipAddr = ipHost.AddressList[0];
IPEndPoint endPoint = new IPEndPoint(ipAddr, 11000);
Socket sClient = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
sClient.BeginConnect(endPoint, new AsyncCallback(ConnectCallback),
sClient);
for (int i = 0; i <5; i++)
Console.WriteLine("Do Some Other Work.");
byte[] byteData = Encoding.ASCII.GetBytes("Some Data.");
ConnectDone.WaitOne();
sClient.BeginSend(byteData, 0, byteData.Length, 0,
new AsyncCallback(SendCallback), sClient);
………
}
(注:ManualResetEvent 允许线程通过发信号互相通信。通常, 此通信涉及一个线程在其他线程进行之前必Die Funktion
ManualResetEvent ist nicht
verfügbarStandardmäßig: Reset(), Set(), WaitOne()以后,该对象将保持原来的状态不变直到它Die Funktion „Reset()“ ist die Funktion „Set()“. Die Funktion „ManualResetEvent“ ist nicht verfügbar信号状态,此时该线程将被激活.)
Sie haben die Funktion ConnectDone.WaitOne(); Sie haben die Funktion „ConnectDone.Set()“ verwendet, um die Funktion „ConnectDone.Set()“ zu verwenden了ManualResetEvent.WaitOne() ist eine Funktion, mit der Sie die Funktion „ManualResetEvent.WaitOne()“ verwenden können工作.
同步与异步:
简单地说, 同步即程序执行一个方法, 等该方法返回之后, 继续往下走,
异步:即程序调用一个方法后立即返回, „宏观“而言, 主线程与方法线程并行执行
Die Socket-Funktion von BeginConnect ist die neueste Version von
for (int i = 0; i<
5; i++)
Console.Write Line("Mach etwas anderes Arbeiten.");
byte[] byteData = Encoding.ASCII.GetBytes("Some Data.");
须等待同步方法的返回, 但是在异步的情况下, 将可能在5行„Do Some Other Work.“之间的某个时刻出现„Socket connected to…“ 的输出(实际情况还依赖于操作系统的线程
Sobald Sie sClient.BeginSend(…) verwenden, um ConnectDone.WaitOne() anzuzeigen, und um die Funktion „ConnectCallback“ (ConnectCallback) zu verwenden,须得同步一下
.