const int READ_BUFFER_SIZE = 1024 * 1024;
const int PORT_NUM = 10000;
private TcpClient client = new TcpClient();
private byte[] readBuffer = new byte[READ_BUFFER_SIZE];
public delegate void LineReceive(MyTCPClient sender, byte[] Data);
public event LineReceive LineReceived;
public bool ConStatus;
public void SendData(byte[] data)
{
lock (client.GetStream())
{
NetworkStream Nstr;
Nstr = client.GetStream();
Int32 buffersize = data.Length;
Nstr.Write(data, 0, buffersize);
}
}
public void Disconnect()
{
MarkAsDisconnected();
}
private void StreamReceiver(IAsyncResult ar)
{
int BytesRead;
byte[] st;
try
{
// Ensure that no other threads try to use the stream at the same time.
lock (client.GetStream())
{
// Finish asynchronous read into readBuffer and get number of bytes read.
BytesRead = client.GetStream().EndRead(ar);
}
// Convert the byte array the message was saved into, minus one for the
// Chr(13).
if (BytesRead < 1)
{
MarkAsDisconnected();
//return;
}
//strMessage1 = Encoding.ASCII.GetString(readBuffer, 0, BytesRead - 1);
//LineReceived(this, readBuffer);
//Ensure that no other threads try to use the stream at the same time.
if (readBuffer.Length <= BytesRead)
{
st = new byte[readBuffer.Length];
Array.Copy(readBuffer, 0, st, 0, readBuffer.Length);
}
else
{
st = new byte[BytesRead];
Array.Copy(readBuffer, 0, st, 0, BytesRead);
}
LineReceived(this, st);
lock (client.GetStream())
{
// Start a new asynchronous read into readBuffer.
client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(StreamReceiver), null);
}
}
catch
{
MarkAsDisconnected();
}
}
private void MarkAsDisconnected()
{
//readBuffer = null;
client.Close();
ConStatus = false;
}
public void ConnectHost(IPAddress hostipaddress, int port)
{
try
{
client = new TcpClient();
client.Connect(hostipaddress, port);
readBuffer = new byte[READ_BUFFER_SIZE];
client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(StreamReceiver), null);
ConStatus = true;
}
catch
{
ConStatus = false;
}
}