init commit all code
This commit is contained in:
113
Test/Getf.Service.Transfer.Request.SDK/TcpSevice.cs
Normal file
113
Test/Getf.Service.Transfer.Request.SDK/TcpSevice.cs
Normal file
@@ -0,0 +1,113 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace Getf.Service.Transfer.Request.SDK
|
||||
{
|
||||
public class TcpSevice : IDisposable
|
||||
{
|
||||
public event Action<TcpSevice, byte[]> OnDataGetted;
|
||||
|
||||
private string _IP;
|
||||
private int _Port;
|
||||
TcpClient _TcpClient;
|
||||
|
||||
public bool IsConnected = false;
|
||||
|
||||
private NetworkStream MNetworkStream;
|
||||
|
||||
public TcpSevice(string ip, int port)
|
||||
{
|
||||
_IP = ip;
|
||||
_Port = port;
|
||||
}
|
||||
|
||||
public void Connect()
|
||||
{
|
||||
if (_TcpClient != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_TcpClient = new TcpClient();
|
||||
var asyncCallback = new AsyncCallback(Connected);
|
||||
ManualResetEvent manualResetEvent = new ManualResetEvent(false);
|
||||
_TcpClient.BeginConnect(_IP, _Port, asyncCallback, new object[] { manualResetEvent });
|
||||
manualResetEvent.WaitOne();
|
||||
manualResetEvent.Dispose();
|
||||
IsConnected = true;
|
||||
}
|
||||
|
||||
private void Connected(IAsyncResult asyncResult)
|
||||
{
|
||||
var objs = asyncResult.AsyncState as object[];
|
||||
|
||||
var manualResetEvent = (ManualResetEvent)objs[0];
|
||||
|
||||
_TcpClient.EndConnect(asyncResult);
|
||||
manualResetEvent.Set();
|
||||
}
|
||||
|
||||
public void Receive()
|
||||
{
|
||||
if (MNetworkStream == null)
|
||||
{
|
||||
MNetworkStream = _TcpClient.GetStream();
|
||||
}
|
||||
var buffer = new byte[100 * 1024 * 1024];
|
||||
if (MNetworkStream.CanRead)
|
||||
{
|
||||
MNetworkStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(Received), new object[] { MNetworkStream, buffer });
|
||||
}
|
||||
}
|
||||
|
||||
private void Received(IAsyncResult asyncResult)
|
||||
{
|
||||
var objs = asyncResult.AsyncState as object[];
|
||||
var stream = objs[0] as Stream;
|
||||
var buffer = objs[1] as byte[];
|
||||
stream.EndRead(asyncResult);
|
||||
if (OnDataGetted != null)
|
||||
{
|
||||
OnDataGetted(this, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
public void Send(byte[] buffer)
|
||||
{
|
||||
ManualResetEvent manualResetEvent = new ManualResetEvent(false);
|
||||
if (MNetworkStream == null)
|
||||
{
|
||||
MNetworkStream = _TcpClient.GetStream();
|
||||
}
|
||||
if (MNetworkStream.CanWrite)
|
||||
{
|
||||
MNetworkStream.BeginWrite(buffer, 0, buffer.Length, new AsyncCallback(Sended), new object[] { manualResetEvent, MNetworkStream, buffer });
|
||||
}
|
||||
}
|
||||
|
||||
private void Sended(IAsyncResult asyncResult)
|
||||
{
|
||||
var objs = asyncResult.AsyncState as object[];
|
||||
var manualResetEvent = (ManualResetEvent)objs[0];
|
||||
var stream = objs[1] as Stream;
|
||||
var buffer = objs[2] as byte[];
|
||||
stream.EndWrite(asyncResult);
|
||||
stream.Flush();
|
||||
//stream.Dispose();
|
||||
manualResetEvent.Set();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (MNetworkStream != null)
|
||||
{
|
||||
MNetworkStream.Close();
|
||||
MNetworkStream.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user