77 lines
2.0 KiB
C#
77 lines
2.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace DoAn.Core
|
|
{
|
|
public class SocketClientManager
|
|
{
|
|
private string ip;
|
|
private int port;
|
|
private static Socket clientSocket;
|
|
private static Thread GetMessageThread = null;
|
|
public delegate void GetMessageDelegate<T>(T str1);
|
|
public event GetMessageDelegate<string> GetMessageEvent;
|
|
|
|
public SocketClientManager(string ip, int port)
|
|
{
|
|
this.ip = ip;
|
|
this.port = port;
|
|
|
|
}
|
|
|
|
public bool ConnectSocket()
|
|
{
|
|
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
|
|
try
|
|
{
|
|
clientSocket.Connect(ipEndPoint);
|
|
GetMessageThread = new Thread(GetMessage);
|
|
GetMessageThread.Start();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public bool SendMessage(string message)
|
|
{
|
|
byte[] sendMsg = Encoding.UTF8.GetBytes(message);
|
|
try
|
|
{
|
|
clientSocket.Send(sendMsg);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
public void GetMessage()
|
|
{
|
|
while (true)
|
|
{
|
|
byte[] receiveByte = new byte[1024];
|
|
int length = clientSocket.Receive(receiveByte);
|
|
string str = Encoding.UTF8.GetString(receiveByte, 0, length);
|
|
if (str.Length > 0)
|
|
{
|
|
if (null != GetMessageEvent)
|
|
GetMessageEvent(str);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|