TCP的接收与发送消息类
public class TcpHelper
{
/// <summary>
/// 作为一个收消息事件
/// </summary>
/// <param name="buffer"></param>
/// <param name="clientIp"></param>
/// <param name="intPort"></param>
public delegate void DelReceive(byte[] buffer, string clientIp, int intPort);
public event DelReceive Receiving;
/// <summary>
/// 服务器
/// </summary>
Socket serverSocket;
/// <summary>
/// 客户端
/// </summary>
Socket clientSocket;
/// <summary>
/// 客户线程
/// </summary>
Thread thread;
public string IpAddress { get; set; }
public int Port { get; set; }
private int _bufferSize = 1024;
public int BufferSize
{
get
{
return _bufferSize;
}
set
{
_bufferSize = value;
}
}
public TcpHelper()
{
}
/// <summary>
/// 构造
/// </summary>
/// <param name="ipAddress"></param>
/// <param name="port"></param>
public TcpHelper(string ipAddress, int port, int bufferSize = 1024)
{
this.IpAddress = ipAddress;
this.Port = port;
this.BufferSize = bufferSize;
}
/// <summary>
/// 作为服务器,需要Bind
/// </summary>
public void Bind()
{
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, this.Port);
serverSocket = new Socket(ipEnd.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipEnd);
serverSocket.Listen(10);
clientSocket = serverSocket.Accept();
thread = new Thread(new ThreadStart(Receive));
thread.Start();
}
private void Receive()
{
IPEndPoint remotePoint = (IPEndPoint)clientSocket.RemoteEndPoint;
string remoteAddress = remotePoint.Address.ToString();
int remotePort = remotePoint.Port;
byte[] buffer = new byte[this.BufferSize];
while (true)
{
clientSocket.Receive(buffer, buffer.Length, SocketFlags.None);
OnReceiving(buffer, remoteAddress, remotePort);
}
}
void OnReceiving(byte[] buffer, string remoteAddress, int remotePort)
{
if (Receiving != null)
{
Receiving(buffer, remoteAddress, remotePort);
}
}
/// <summary>
/// 连接一个Socket服务器
/// </summary>
/// <returns></returns>
public bool Connect()
{
try
{
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse(this.IpAddress), this.Port);
clientSocket = new Socket(ipEnd.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(ipEnd);
return true;
}
catch (Exception ex)
{
}
return false;
}
//发送消息
public void Send(byte[] buffer)
{
try
{
clientSocket.Send(buffer, buffer.Length, SocketFlags.None);
}
catch (Exception ex)
{
}
}
/// <summary>
/// 关闭服务器
/// </summary>
public void Close()
{
try
{
if (serverSocket != null && serverSocket.Connected)
{
serverSocket.Close();
}
if (clientSocket != null && clientSocket.Connected)
{
clientSocket.Close();
}
}
catch
{
}
}
}
简单的窗口调用
Bz.Utils.TcpHelper tcpserver = new Bz.Utils.TcpHelper();
Bz.Utils.TcpHelper tcpclient = new Bz.Utils.TcpHelper();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Task.Run(new Action(() =>
{
tcpserver.IpAddress = "127.0.0.1";
tcpserver.Port = 3001;
tcpserver.Receiving += Tcpserver_Receiving;
tcpserver.Bind();
}));
Task.Run(new Action(() =>
{
tcpclient.Port = 3001;
tcpclient.IpAddress = "127.0.0.1";
tcpclient.Connect();
}));
}
private void Tcpserver_Receiving(byte[] buffer, string clientIp, int intPort)
{
this.Invoke(new Action(() =>
{
txtReceive.AppendText(System.Text.Encoding.UTF8.GetString(buffer) + ":" + clientIp + ":" + intPort);
}));
}
private void btnSender_Click(object sender, EventArgs e)
{
tcpclient.Send(System.Text.Encoding.UTF8.GetBytes(txtSender.Text));
}