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();