Thread TCPReceiveDataThread = null; //tcp clienct接收数据线程
public Socket _targetSocket = null; //连接目标套接字
public byte[] tcpRxBuf; //的使用接收到的数据 数据长度不确定
private const int MAX_RX_LEN = 512;
private byte[] _tdpReceiveData = new byte[MAX_RX_LEN]; //TCP clienct缓存接收到的直接数据,必须固定大小
/// <summary>
/// 连接服务器
/// </summary>
/// <returns>TRUE or FALSE</returns>
private bool ConnServer()
{
try
{
//InterNetwork: 地址簇IPV4
//Stream:套接字类型支持可靠、 双向、 基于连接的字节流
//Tcp: 指定通讯协议类型为传输控制协议
_targetSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立套接字
//IP地址转换格式
IPAddress address = IPAddress.Parse(_targetIP);
//IP地址端口绑定网络节点
IPEndPoint point = new IPEndPoint(address, _targetPort);
//建立与远程主机的连接,失败则进入异常
_targetSocket.Connect(point);
//连接后获取本地IP和端口
localIpAndPort = _targetSocket.LocalEndPoint.ToString();
//切割出IP
localIP = localIpAndPort.Split(':')[0];
//正常连接,建线程
TCPReceiveDataThread = new Thread(new ThreadStart(TcpClientReceiveDataThread));
//后台运行
TCPReceiveDataThread.IsBackground = true;
//线程名
TCPReceiveDataThread.Name = "Tcp客户端接收数据";
//线程开始
TCPReceiveDataThread.Start();
//置状态
connState = true;
return true;
}
catch (Exception ex)
{
//异常返回
_connState = false;
MessageBox.Show(ex.Message, "异常");
return false;
}
finally
{
//委托显示
this.OnConnStateChange(new EventArgs());
}
}
/// <summary>
/// tcp client接收数据线程
/// </summary>
private void TcpClientReceiveDataThread()
{
while (true)
{
try
{
//接收数据,并获取长度
int length = _targetSocket.Receive(_tdpReceiveData);
if (length == 0)
{
_connState = false;
return;
}
//实际使用BUF
tcpRxBuf = new byte[length];
Array.Copy(_tdpReceiveData, tcpRxBuf, length);
//委托显示
this.OnBufferReceChange(new EventArgs());
}
catch (Exception ex)
{
_connState = false;
}
}
}
/// <summary>
/// tcp client 发送数据
/// </summary>
/// <param name="buffer"> 发送的数据</param>
/// <returns>TRUE or FALSE</returns>
private bool tcpClientSendData(byte[] buffer)
{
try
{
_targetSocket.Send(buffer);//数据发送
return true;
}
catch (Exception ex)
{
_connState = false;
this.OnConnStateChange(new EventArgs());//委托显示
return false;
}
}
/// <summary>
/// 关闭TCP CLient
/// </summary>
private void closeTcpClent()
{
try
{
//关闭线程
ReceiveData.Abort();
//关闭socket类实例
_targetSocket.Close();
}
catch (Exception ex)
{
string err = ex.ToString();
}
finally
{
connState = false;
}
}