C# TCP/IP的连接、发送、接收和关闭实现

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;

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值