Kodumda, her onaylamada bir yöntemi çağırmak için bir zamanlayıcı kullanarak röle kartına bağlanmaya çalışıyorum. Sorun şu ki, uygulamamı çalıştırdığımda, ilk 3-4 keneler için başarılı bir bağlantı kuracağım. Ancak bundan sonra bağlantı kurulamaz. Kodumda neyin yanlış olduğunu anlayamıyorum. Herhangi bir yardım takdir edilecektir. Ben yöntem çağrıldığında asp.netTcpClient.BeginConnect (ana makine, bağlantı noktası, boş, boş); rasgele bir başarı verir
ile çalışıyorum:
private void open_ethernet_connection()
{
byte connected = 0;
TcpClient client = new TcpClient();
try
{
IAsyncResult result = client.BeginConnect(textBox_IP.Text.Substring(0, textBox_IP.Text.IndexOf(",")), GlobalClass.port, null, null);
bool success = result.AsyncWaitHandle.WaitOne(1000, true);
if (!success)
{
connected = 0;
client.Close();
Response.Write("Failed to connect");
}
else connected = 1;
if (connected == 1)
{
ns = client.GetStream();
ns.ReadTimeout = 1000;
SerBuf[0] = (byte)commands.GET_VER; // get version command for ETH RLY16/02, returns software version
transmit(1);
receive(3);
module_version = SerBuf[2]; //print the software version on screen
device_found = true;
}
}
catch (SocketException)
{
if (selected_port == "Custom IP")
{
Response.Write("Unable to connect to module at " + GlobalClass.ipaddress);
}
else Response.Write("Unable to connect to module at " + selected_port);
return;
}
}
aramak zorunda değilsiniz ancak 'TcpClient' imha edilmelidir eğer bittiğinde mümkünse 'using' kullanın. Ayrıca WaitOne ile senkronize beklemek için Async yöntemi kullanmak için anlamsız görünüyor. – Peter
Zamanlayıcının kaç aralığı var? – jgauffin
@Peter 'client.Connect (ana makine, bağlantı noktası) kullanılarak aynı sonucu verir. –