cholegm
int Port = 2;
int BaudRate = 115200;
ConnectionMethod = ConnectionMethod.Serial;
public void Connect()
{
// Save old log info in case this is a reconnect
Poderosa.ConnectionParam.LogType logType = Poderosa.ConnectionParam.LogType.Default;
string file = null;
if (this.TerminalPane.Connection != null)
{
logType = this.TerminalPane.Connection.LogType;
file = this.TerminalPane.Connection.LogPath;
//GApp.GetConnectionCommandTarget().Close();
this.TerminalPane.Connection.Close();
this.TerminalPane.Detach();
}
try
{
if ((Poderosa.ConnectionParam.ConnectionMethod)this.Method == Poderosa.ConnectionParam.ConnectionMethod.Telnet)
{
TelnetTerminalParam tel = new TelnetTerminalParam(this.Host);
tel.Port = Port;
tel.TerminalType = TerminalType.VT100;
tel.RenderProfile = new RenderProfile();
tel.Encoding = EncodingType.ISO8859_1;
CommunicationUtil.SilentClient s = new CommunicationUtil.SilentClient();
Size sz = this.Size;
SocketWithTimeout swt;
swt = new TelnetConnector((Poderosa.ConnectionParam.TelnetTerminalParam)tel, sz);
swt.AsyncConnect(s, tel.Host, tel.Port);
ConnectionTag ct = s.Wait(swt);
this.TerminalPane.FakeVisible = true;
this.TerminalPane.Attach(ct);
ct.Receiver.Listen();
if (file != null)
this.SetLog((LogType)logType, file, true);
this.TerminalPane.ConnectionTag.RenderProfile = new RenderProfile();
this.SetPaneColors(Color.White, Color.Black);
}
else if ((Poderosa.ConnectionParam.ConnectionMethod)this.Method == Poderosa.ConnectionParam.ConnectionMethod.SSH2)
{
//------------------------------------------------------------------------
SSHTerminalParam sshp = new SSHTerminalParam((Poderosa.ConnectionParam.ConnectionMethod)this.Method, this.Host, this.UserName, this.Password);
sshp.AuthType = this.AuthType;
sshp.IdentityFile = this.IdentifyFile;
sshp.Encoding = EncodingType.ISO8859_1;
sshp.Port = Port;
sshp.RenderProfile = new RenderProfile();
sshp.TerminalType = TerminalType.XTerm;
CommunicationUtil.SilentClient s = new CommunicationUtil.SilentClient();
Size sz = this.Size;
SocketWithTimeout swt;
swt = new SSHConnector((Poderosa.ConnectionParam.SSHTerminalParam)sshp, sz, sshp.Passphrase, (HostKeyCheckCallback)null);
swt.AsyncConnect(s, sshp.Host, sshp.Port);
ConnectionTag ct = s.Wait(swt);
this.TerminalPane.FakeVisible = true;
this.TerminalPane.Attach(ct);
ct.Receiver.Listen();
//-------------------------------------------------------------
if (file != null)
this.SetLog((LogType)logType, file, true);
this.TerminalPane.ConnectionTag.RenderProfile = new RenderProfile();
this.SetPaneColors(Color.White,Color.Black);
}
else if ((Poderosa.ConnectionParam.ConnectionMethod)this.Method == Poderosa.ConnectionParam.ConnectionMethod.Serial)
{
SerialTerminalParam stp = new SerialTerminalParam();
stp.BaudRate = BaudRate;
stp.FlowControl = FlowControl.None;
stp.Parity = Poderosa.ConnectionParam.Parity.NOPARITY;
stp.Port = Port;
stp.StopBits = Poderosa.ConnectionParam.StopBits.ONESTOPBIT;
stp.TerminalType = TerminalType.XTerm;
IntPtr pt = new IntPtr();
SerialTerminalConnection stcon = new SerialTerminalConnection(stp, pt, this.TerminalPane.Width, this.TerminalPane.Height);
ConnectionTag ct = new ConnectionTag(stcon);
this.TerminalPane.FakeVisible = true;
this.TerminalPane.Attach(ct);
ct.Receiver.Listen();
//-------------------------------------------------------------
if (file != null)
this.SetLog((LogType)logType, file, true);
this.TerminalPane.ConnectionTag.RenderProfile = new RenderProfile();
this.SetPaneColors(Color.White, Color.Black);
}
else
{
return;
}
}
catch
{
//MessageBox.Show(e.Message, "Connection Error");
return;
}
}
Когда я пытаюсь открыть/подключиться к последовательному порту (COM2) Я получил ошибку "при подключении к COM2 произошла следующая ошибка. WaitCommEvent failed 6".
ajeda
Проблема с этим soultion заключается в том, что он создает пустой дескриптор для последовательного порта (IntPtr pt = new IntPtr) вместо получения правильного. Вы можете попробовать создать его вручную, но мне было проще использовать функцию CommunicationUtil.CreateNewSerialConnection(IWin32Window parent, SerialTerminalParam stp), которая возвращает объект ConnectionTag. Поэтому вместо того, чтобы создавать ConnectionTag вручную, как в приведенном выше примере, используйте эту функцию и передайте ей экземпляр SerialTerminalParam с требуемой конфигурацией. Это должно сработать.