一:声明
using System.Threading;
using System.Net.Sockets;
TcpClient clientsocket = null;
NetworkStream networkStream = null;
二:建立链接
try
{
clientsocket = new TcpClient(this.ipControl.Text, port);
if (clientsocket.Client.Connected)
{
networkStream = clientsocket.GetStream();
return true;
}
else
{
if (clientsocket != null)
{
clientsocket.Close();
clientsocket = null;
}
return false;
}
}
catch (Exception ex)
{
CloseSocket();
return false;
}
三:关闭链接
private void CloseSocket()
{
if (networkStream != null)
{
networkStream.Close();
networkStream = null;
}
if (clientsocket != null)
{
clientsocket.Close();
clientsocket = null;
}
}
四:发数据,专门建立线程发,无需异步
bWireLessSndRuning = true;
bWireLessSndRuningEnd = true;
wireLessSndThread = new Thread(new ThreadStart(SendData));
wireLessSndThread.Start();
try
{
if (networkStream.CanWrite)
{
networkStream.Write(arrayData, 0, arrayData.Length - 1);
iSuccessSendNum++;
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
bWireLessSndRuning = false;
bWireLessSndRuningEnd = true;
return;
}
五:接收数据,利用回调,不需要专门线程处理
bWireLessRcvRuning = true;
networkStream.BeginRead(recvData, 0, recvData.Length, new AsyncCallback(ReadComplete), networkStream);
private void ReadComplete(IAsyncResult ar)
{
try
{
if (bWireLessRcvRuning)
{
//退出的时候会出发,而这是链接关闭导致networkStream为空,所以退出时不再读消息
int RecvLength = networkStream.EndRead(ar);
if (RecvLength == 0)
return;
iTotalRecvNum++;
iTotalRecvLen += RecvLength;
delegateShowRecv(iTotalRecvNum.ToString() + ":" + iTotalRecvLen.ToString());
}
if (networkStream != null)
{
networkStream.BeginRead(recvData, 0, recvData.Length, new AsyncCallback(ReadComplete), networkStream);
}
}
catch (Exception ex)
{
return;
}
}
C# 网络异步传输
最新推荐文章于 2023-04-24 12:39:40 发布