using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication2
{
class ClientSocket
{
protected string host="127.0.0.1";
protected int port = 8080;
protected Socket client= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public delegate void SocketEvent(object data);
public SocketEvent dataRecived;
/// <summary>
/// 连接到服务器
/// </summary>
public void Connect()
{
//端口及IP
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(this.host), this.port);
//开始连接到服务器
client.BeginConnect(ipe, asyncResult =>
{
client.EndConnect(asyncResult);
//接受消息
Recive();
}, null);
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="socket"></param>
/// <param name="message"></param>
public void Send(byte[] data)
{
if (client == null || data.Length == 0) return;
//编码
try
{
client.BeginSend(data, 0, data.Length, SocketFlags.None, asyncResult =>
{
//完成发送消息
int length = client.EndSend(asyncResult);
}, null);
}
catch (Exception e)
{
Console.WriteLine("ClientSocket Error:{0}", e.Message);
}
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="socket"></param>
private void Recive()
{
byte[] data = new byte[1024];
try
{
//开始接收数据
client.BeginReceive(data, 0, data.Length, SocketFlags.None,
asyncResult =>
{
try
{
int length = client.EndReceive(asyncResult);
//对接受到的数据解码
if (length > 0)
{
byte[] content = new byte[length];
Array.Copy(data, content, length);
string msg = System.Text.Encoding.UTF8.GetString(content);
if (dataRecived != null)
{
dataRecived(msg);
}
}
Recive();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine("ClientSocket Disconnect!");
this.Connect();
}
}, null);
}
catch (Exception e)
{
Console.WriteLine("ClientSocket Error:", e.Message);
}
}
}
}
ClientSocket
最新推荐文章于 2024-05-23 23:37:34 发布