C#_TCPClient異步連接和接收消息


 

//c#不愧是全能型的語言,異步連線程都省了

class State
{

public byte[] bufferCache;

public TcpClient tcpClient;

}

...

private TcpClient tcpServer; 

private TcpListener TCPListener;

TCPListener = new TcpListener(IPAddress.Parse(TCPIP), Convert.ToInt32(TCPPORT));

TCPListener.BeginAcceptTcpClient(new AsyncCallback(requestCallBack), TCPListener);

private void requestCallBack(IAsyncResult iar)
{

TcpListener listener = (TcpListener)iar.AsyncState;

tcpServer = listener.EndAcceptTcpClient(iar);

ConsoleUserColor.SetColorText(WhichWindow.LOGWindow, Color.Green, "連接成功!");

State state = new State();

state.tcpClient = tcpServer;

NetworkStream stream = tcpServer.GetStream();

if (stream.CanRead)

{

state.bufferCache = new byte[tcpServer.ReceiveBufferSize];

stream.BeginRead(state.bufferCache, 0, state.bufferCache.Length, new AsyncCallback(AsyncReadCallBack), state);

}

}

private void AsyncReadCallBack(IAsyncResult iar)//異步讀取消息
{

State state = (State)iar.AsyncState;

if (state.tcpClient == null || !state.tcpClient.Connected)

return;

int ByteReads;

NetworkStream ns = state.tcpClient.GetStream();

ByteReads = ns.EndRead(iar);

if (ByteReads > 0)

{

string message = System.Text.Encoding.Default.GetString(state.bufferCache).Replace("\0", "");//得到消息

}

...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM