public static void receive()
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("Main Thread State:" + thr.ThreadState); //IPHostEntry ipHost = Dns.Resolve("127.0.0.1");
//IPAddress ipAddr = ipHost.AddressList[0];
IPAddress ipAddr = IPAddress.Parse("192.16.10.10");
IPEndPoint endPoint = new IPEndPoint(ipAddr,5001); Socket sClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); sClient.BeginConnect(endPoint,new AsyncCallback(ConnectCallback),sClient);
socketEvent.WaitOne();
Console.WriteLine("connect ok"); sClient.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),sClient);
socketEvent.WaitOne();
Console.WriteLine("Response receive:{0}",theResponse);
//sClient.Shutdown(SocketShutdown.Both);
//sClient.Close();
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public static void ConnectCallback(IAsyncResult ar)
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("ConnectCallback Thread State:" + AppDomain.GetCurrentThreadId()); Socket sClient = (Socket)ar.AsyncState;
sClient.EndConnect(ar);
Console.WriteLine("Socket connected to " + sClient.RemoteEndPoint.ToString());
socketEvent.Set();
}
catch (Exception ex)
{
//string err_message = ex.Message;
//if (err_message.IndexOf("No connection could be made because the target machine actively refused it")> -1)
//{
Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")+"||"+AppDomain.GetCurrentThreadId()+"||3--Level 3 Server connection is broken, waiting for Level 3 Server connection......");
// Thread.Sleep(3000);
sClient= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// sClient.BeginConnect(EPServer, new AsyncCallback(ConnectCallback),sClient);
socketEvent.Set();
// return;
// Thread.CurrentThread.Abort();
// Thread.CurrentThread.Abort();
//}
//else
//{
// Console.WriteLine(ex.ToString());
//}
}
}public static void ReceiveCallback(IAsyncResult ar)
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("ConnectCallback Thread State:" + AppDomain.GetCurrentThreadId()); Socket sClient = (Socket)ar.AsyncState; int bytesRead = sClient.EndReceive(ar);//,i=0; if (bytesRead>0)
{ theResponse = Encoding.ASCII.GetString(buffer,16, bytesRead);
Console.WriteLine(theResponse);
sClient.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),sClient);
}
else
{
Console.WriteLine("===============================");
// socketEvent.Set();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("Main Thread State:" + thr.ThreadState); //IPHostEntry ipHost = Dns.Resolve("127.0.0.1");
//IPAddress ipAddr = ipHost.AddressList[0];
IPAddress ipAddr = IPAddress.Parse("192.16.10.10");
IPEndPoint endPoint = new IPEndPoint(ipAddr,5001); Socket sClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); sClient.BeginConnect(endPoint,new AsyncCallback(ConnectCallback),sClient);
socketEvent.WaitOne();
Console.WriteLine("connect ok"); sClient.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),sClient);
socketEvent.WaitOne();
Console.WriteLine("Response receive:{0}",theResponse);
//sClient.Shutdown(SocketShutdown.Both);
//sClient.Close();
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public static void ConnectCallback(IAsyncResult ar)
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("ConnectCallback Thread State:" + AppDomain.GetCurrentThreadId()); Socket sClient = (Socket)ar.AsyncState;
sClient.EndConnect(ar);
Console.WriteLine("Socket connected to " + sClient.RemoteEndPoint.ToString());
socketEvent.Set();
}
catch (Exception ex)
{
//string err_message = ex.Message;
//if (err_message.IndexOf("No connection could be made because the target machine actively refused it")> -1)
//{
Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")+"||"+AppDomain.GetCurrentThreadId()+"||3--Level 3 Server connection is broken, waiting for Level 3 Server connection......");
// Thread.Sleep(3000);
sClient= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// sClient.BeginConnect(EPServer, new AsyncCallback(ConnectCallback),sClient);
socketEvent.Set();
// return;
// Thread.CurrentThread.Abort();
// Thread.CurrentThread.Abort();
//}
//else
//{
// Console.WriteLine(ex.ToString());
//}
}
}public static void ReceiveCallback(IAsyncResult ar)
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("ConnectCallback Thread State:" + AppDomain.GetCurrentThreadId()); Socket sClient = (Socket)ar.AsyncState; int bytesRead = sClient.EndReceive(ar);//,i=0; if (bytesRead>0)
{ theResponse = Encoding.ASCII.GetString(buffer,16, bytesRead);
Console.WriteLine(theResponse);
sClient.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),sClient);
}
else
{
Console.WriteLine("===============================");
// socketEvent.Set();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
使用全局变量,等方法传递数据。
示例:
public MyThread
{
public object ThreadParam = null;
Thread workThread = null;
object workThreadRet = nulll;
public MyThread(){}
public Start(){
workThread = new Thread( new ThreadStart( proc ) );
workThread.Start();
}
public void Abort(){
if( workThread != null ) workThread.Abort();
}
void proc(){
...
workThreadRet = ...;
}
}
{
retrun this.global
}