diff --git a/Examples/Program.cs b/Examples/Program.cs index 0ecfb80..c442672 100644 --- a/Examples/Program.cs +++ b/Examples/Program.cs @@ -97,14 +97,14 @@ static void Scenario2 () { Task.Factory.StartNew(async () => { - using(var interf = new MewtocolInterface("10.237.191.3")) { + //automatic endpoint + using (var interf = new MewtocolInterface("10.237.191.3")) { await interf.ConnectAsync(); - if(interf.IsConnected) { + if (interf.IsConnected) { - var plcInf = await interf.GetPLCInfoAsync(); - Console.WriteLine(plcInf); + await Task.Delay(5000); } @@ -112,15 +112,16 @@ static void Scenario2 () { } - + //manual endpoint using (var interf = new MewtocolInterface("10.237.191.3")) { + interf.HostEndpoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("10.237.191.77"), 0); + await interf.ConnectAsync(); - if (interf.IsConnected) { + if(interf.IsConnected) { - var plcInf = await interf.GetPLCInfoAsync(); - Console.WriteLine(plcInf); + await Task.Delay(5000); } diff --git a/MewtocolNet/Mewtocol/MewtocolInterface.cs b/MewtocolNet/Mewtocol/MewtocolInterface.cs index eb0c63a..4c54900 100644 --- a/MewtocolNet/Mewtocol/MewtocolInterface.cs +++ b/MewtocolNet/Mewtocol/MewtocolInterface.cs @@ -43,7 +43,7 @@ public partial class MewtocolInterface : INotifyPropertyChanged, IDisposable { /// public event PropertyChangedEventHandler PropertyChanged; - private int connectTimeout = 1000; + private int connectTimeout = 3000; /// /// The initial connection timeout in milliseconds /// @@ -277,31 +277,40 @@ private async Task ConnectTCP () { try { if(HostEndpoint != null) { + client = new TcpClient(HostEndpoint) { ReceiveBufferSize = RecBufferSize, NoDelay = false, - ExclusiveAddressUse = true, }; + var ep = (IPEndPoint)client.Client.LocalEndPoint; + Logger.Log($"Connecting [MAN] endpoint: {ep.Address}:{ep.Port}", LogLevel.Verbose, this); + } else { + client = new TcpClient() { ReceiveBufferSize = RecBufferSize, NoDelay = false, ExclusiveAddressUse = true, }; + } var result = client.BeginConnect(targetIP, port, null, null); var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(ConnectTimeout)); - if(!success) { + if(!success || !client.Connected) { OnMajorSocketExceptionWhileConnecting(); return; } + if(HostEndpoint == null) { + var ep = (IPEndPoint)client.Client.LocalEndPoint; + Logger.Log($"Connecting [AUTO] endpoint: {ep.Address.MapToIPv4()}:{ep.Port}", LogLevel.Verbose, this); + } + stream = client.GetStream(); stream.ReadTimeout = 1000; - Console.WriteLine($"Connected {client.Connected}"); await Task.CompletedTask; } catch (SocketException) { @@ -720,10 +729,11 @@ private async Task SendSingleBlock (string _blockString) { if (client == null || !client.Connected ) { await ConnectTCP(); - if (!client.Connected) - return null; } + if (client == null || !client.Connected) + return null; + var message = _blockString.ToHexASCIIBytes(); //send request @@ -759,7 +769,7 @@ private async Task SendSingleBlock (string _blockString) { } } catch (IOException) { - Logger.Log($"Critical IO exception on receive", LogLevel.Critical, this); + OnMajorSocketExceptionWhileConnected(); return null; } catch (SocketException) { OnMajorSocketExceptionWhileConnected();