128 lines
3.1 KiB
C#
128 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Net.Sockets;
|
|
using System.Threading;
|
|
|
|
namespace SafeMobileLib
|
|
{
|
|
public class TCPClient
|
|
{
|
|
private bool DEBUG = true;
|
|
|
|
private TcpClient tcpClient;
|
|
private Thread listenThread;
|
|
private NetworkStream stream;
|
|
|
|
private int port;
|
|
private string ip;
|
|
|
|
public TCPClient(string ip, int port, bool DEBUG)
|
|
{
|
|
this.ip = ip;
|
|
this.port = port;
|
|
this.DEBUG = DEBUG;
|
|
}
|
|
|
|
public bool Connect()
|
|
{
|
|
bool ret = false;
|
|
try
|
|
{
|
|
tcpClient = new TcpClient(ip, port);
|
|
stream = tcpClient.GetStream();
|
|
|
|
listenThread = new Thread(new ThreadStart(HandleConnection));
|
|
listenThread.IsBackground = true;
|
|
listenThread.Start();
|
|
|
|
ret = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
DebugWrite(ex.ToString());
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
public void Disconnect()
|
|
{
|
|
if (listenThread != null)
|
|
{
|
|
listenThread.Abort();
|
|
}
|
|
|
|
if (stream != null)
|
|
{
|
|
stream.Close();
|
|
stream = null;
|
|
}
|
|
|
|
if (tcpClient != null && tcpClient.Connected)
|
|
{
|
|
tcpClient.Close(); tcpClient = null;
|
|
}
|
|
}
|
|
|
|
public bool Write(byte[] data, int len)
|
|
{
|
|
bool resp = false;
|
|
try
|
|
{
|
|
if (tcpClient.Connected && stream.CanWrite)
|
|
{
|
|
stream.Write(data, 0, len);
|
|
resp = true;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
DebugWrite(ex.ToString());
|
|
}
|
|
return resp;
|
|
}
|
|
|
|
private void HandleConnection()
|
|
{
|
|
Byte[] data = new Byte[4096];
|
|
try
|
|
{
|
|
while (true)
|
|
{
|
|
int recv = 0;
|
|
if (stream.DataAvailable)
|
|
{
|
|
recv = stream.Read(data, 0, data.Length);
|
|
|
|
if (this.OnMessageRecv != null)
|
|
{
|
|
this.OnMessageRecv(data, recv);
|
|
}
|
|
}
|
|
Thread.Sleep(100);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
DebugWrite(ex.ToString());
|
|
}
|
|
finally
|
|
{
|
|
if(stream !=null)
|
|
stream.Close();
|
|
if (tcpClient.Connected)
|
|
tcpClient.Close();
|
|
}
|
|
}
|
|
|
|
public delegate void MessageRecv(byte[] data, int recv);
|
|
public event MessageRecv OnMessageRecv;
|
|
|
|
private void DebugWrite(string txt)
|
|
{
|
|
if (DEBUG) Console.WriteLine(txt);
|
|
}
|
|
}
|
|
}
|