C# Net Framework 2.0 でアプリケーションを開発しています。これは基本的に、tcp クライアント クラスを持つアプリケーションです。アプリケーションは、基本的な ruby tcp サーバーである私のサーバーに接続し、4 時間留まってから切断されます
class TelnetConnection
{
TcpClient tcpSocket;
int TimeOutMs = 400;
static string host = null;
static int prt = 0;
static int timetorec = 10; //sec
public TelnetConnection(string Hostname, int Port)
{
host = Hostname;
prt = Port;
try
{
tcpSocket = new TcpClient(Hostname, Port);
}
catch (Exception x)
{
Console.WriteLine(x.Message)
}
}
public void reconnect(int sec)
{
try
{
System.Threading.Thread.Sleep(sec * 1000); //10sec then retry
tcpSocket = new TcpClient(host, prt);
}
catch (Exception x)
{
Console.WriteLine(x.Message)
}
}
public string Login(string Username, string Password, int LoginTimeOutMs)
{
int oldTimeOutMs = TimeOutMs;
TimeOutMs = LoginTimeOutMs;
string s = Read();
if (!s.TrimEnd().EndsWith(":"))
throw new Exception("Failed to connect : no login prompt");
WriteLine(Username);
s += Read();
if (!s.TrimEnd().EndsWith(":"))
throw new Exception("Failed to connect : no password prompt");
WriteLine(Password);
s += Read();
TimeOutMs = oldTimeOutMs;
return s;
}
public string Read()
{
try
{
if (!tcpSocket.Connected) return null;
StringBuilder sb = new StringBuilder();
do
{
Parse(sb);
System.Threading.Thread.Sleep(TimeOutMs);
} while (tcpSocket.Available > 0);
return sb.ToString();
}
catch (Exception) { return null; }
}
protected override void OnStart(string[] args)
{
System.Runtime.Remoting.Lifetime.LifetimeServices.LeaseTime = TimeSpan.MaxValue;
while (tc.IsConnected)
{
Thread.Sleep(120);
what(tc.Read());
}
}
static void what(string w)
{
if (w == "Example")
{
//DO
}
}
}
助けてください tcp client instaid を試してみましたが、同じアプリケーションが常に接続されたままになるはずです
require 'socket' # Sockets are in standard library
hostname = 'localhost'
port = 2000
s = TCPSocket.open(host, port)
while line = s.gets # Read lines from the socket
puts line.chop # And print with platform line terminator
end
ルビーを繰り返します。これは、使用しているソケットの単なる例です