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