當前位置:編程學習大全網 - 編程語言 - C#怎麽用建立TCP長連接偵聽

C#怎麽用建立TCP長連接偵聽

#region 接受連接

void AcceptCallBack(IAsyncResult ar)

{

Socket s = (Socket)ar.AsyncState;

if(s==null)

{

return;

}

Socket workSocket = s.EndAccept(ar);

if(workSocket==null||stoped)

{

return;

}

allDone.Set();

IPEndPoint remoteHost = workSocket.RemoteEndPoint as IPEndPoint;

string serverIP = remoteHost.Address.ToString();

onAccecpt(serverIP);

//首先取flag標誌

if(workSocket==null||stoped)

{

return;

}

if(workSocket.Poll(-1,SelectMode.SelectRead))

{

StateObject o = new StateObject();

o.queue.Clear();

o.workSocket = workSocket;

int port = remoteHost.Port;

serverIP = remoteHost.Address.ToString()+ ": "+port;

workSocket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,new AsyncCallback(ReceiveCallBack),o);

}

}

#endregion

Thread messageThread;

#region 接受消息

void ReceiveCallBack(IAsyncResult ar)

{

receiveDone.Reset();

StateObject o = ar.AsyncState as StateObject;

Socket workSocket = o.workSocket;

this.workSocket =workSocket;

IPEndPoint remoteHost = workSocket.RemoteEndPoint as IPEndPoint;

int port = remoteHost.Port;

string serverIP = remoteHost.Address.ToString()+ ": "+port;

if(workSocket==null||stoped)

{

return;

}

int pos = workSocket.EndReceive(ar);

if(pos> 0)

{

for(int i=0;i <pos;i++)

{

o.queue.Enqueue(buffer[i]);

}

if(pos==bufferSize)

{

workSocket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,new AsyncCallback(ReceiveCallBack),o);

}

else

{

//讀取結束

//得到接受到全部數據流

if(o.queue.Count> 0)

{

ProcessData processData = new ProcessData();

processData.MessageQueue = MessageHelper.GetMessages(o.queue);

processData.ip=serverIP;

processData.stateObject=o;

MessageQueue.Enqueue(processData);

if(messageThread==null)

{

messageThread = new Thread(new ThreadStart(Process));

messageThread.IsBackground=true;

messageThread.Start();

}

}

o.queue.Clear();

if(workSocket.Poll(-1,SelectMode.SelectRead))

{

workSocket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,new AsyncCallback(ReceiveCallBack),o);

}

}

}

}

#endregion

  • 上一篇:最好的全局鼠標手勢軟件是什麽?
  • 下一篇:如何設置天貓買二送壹?
  • copyright 2024編程學習大全網