Socket的監聽的三種方式
阿新 • • 發佈:2019-02-02
首先要開啟監聽
1 2 3 4 |
Listener
= new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.IP);
IPEndPoint
hostEntry = new IPEndPoint(getLocalmachineIPAddress(),
ServerPort);
Listener.Bind(hostEntry);
Listener.Listen(ConnectionsQueueLength);
|
1. AcceptAsync非同步方式
1 2 3 4 5 |
socketEventArg
= new SocketAsyncEventArgs();
socketEventArg.Completed
+= new EventHandler<SocketAsyncEventArgs>(SocketEventArg_Completed);
socketEventArg.RemoteEndPoint
= hostEntry;
socketEventArg.UserToken
= Listener;
Listener.AcceptAsync(socketEventArg);
|
void SocketEventArg_Completed( object sender,
SocketAsyncEventArgs e)
{
if (e.LastOperation
== SocketAsyncOperation.Accept)
{
Socket
acceptSocket = e.AcceptSocket;
if (acceptSocket
!= null )
{
//
處理方法
}
}
e.AcceptSocket
= null ;
Listener.AcceptAsync(e);
}
|
2. Accept方式
1 2 3 4 5 6 7 |
while ( true )
{
Socket
acceptSocket = Listener.Accept();
if (acceptSocket
!= null )
{
//
處理程式碼
|
1 2 |
}
}
|
3. BeginAccept方式
1 2 3 4 |
while ( true )
{
Listener.BeginAccept( new AsyncCallback(AcceptCallBack),
Listener);
}
|
1 |
private void AcceptCallBack(IAsyncResult
result)
{
Socket
acceptSocket = (Socket)result.AsyncState;
//
處理方法
}
|