2009-11-04 4 views
0

좋아 클래스 문제, 그래서이 코드는 내가 썼다 : 지금C#을 스레드 및

class Connection 
{ 
    public static StreamWriter writer; 
    public static string SERVER; 
    private static int PORT; 
    private static string USER; 
    private static string NICK; 
    private static string CHANNELS; 
    private Thread connection; 
    private Thread ping; 
    public Connection() 
    { 
     connection = new Thread(new ThreadStart(this.Run)); 
     ping = new Thread(new ThreadStart(this.Ping)); 
    } 
    public void Start(string server, int port, string ident, string realname, string nick, string channels) 
    { 
     SERVER = server; 
     PORT = port; 
     USER = "USER " + ident + " 8 * :" + realname; 
     NICK = nick; 
     CHANNELS = channels; 
     connection.Start(); 
     ping.Start(); 
    } 
    public void Ping() 
    { 
     while (true) 
     { 
      try 
      { 
       writer.WriteLine("PING :" + SERVER); 
       writer.Flush(); 
       Console.WriteLine("Ping: " + SERVER); 
       Thread.Sleep(15000); 
      } 
      catch (Exception e) { Console.WriteLine(e.ToString()); } 
     } 
    } 
    public void Run() 
    { 
     NetworkStream stream; 
     TcpClient irc; 
     string inputLine; 
     StreamReader reader; 
     try 
     { 
      irc = new TcpClient(SERVER, PORT); 
      stream = irc.GetStream(); 
      reader = new StreamReader(stream); 
      writer = new StreamWriter(stream); 
      writer.WriteLine(USER); 
      writer.Flush(); 
      writer.WriteLine("NICK " + NICK); 
      writer.Flush(); 
      Thread.Sleep(5000); 
      writer.WriteLine("JOIN " + CHANNELS); 
      writer.Flush(); 

      while (true) 
      { 
       while ((inputLine = reader.ReadLine()) != null) 
       { 
        Console.WriteLine(inputLine); 
       } 
       writer.Close(); 
       reader.Close(); 
       irc.Close(); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.ToString()); 
      Thread.Sleep(5000); 
      Run(); 
     } 
    } 
} 

, 내가 첫 번째 서버를 도입 할 때, 완벽하게 workes :

Connection one = new Connection(); 
    one.Start("irc.serveraddress.com", 6667, "ident", "realname", "nick", "#channel"); 

그것은에 서버를 핑 시간, 모든 ..하지만 두 번째 연결을 소개하자마자 :

Connection two = new Connection(); 
two.Start("irc.differentserveraddress.com", 6667, "ident", "realname", "nick", "#channel"); 

첫 번째 서버에 대해 ping을 중지합니다. 두 번째 서버에 ping을하면 두 서버 모두에 ping을 계속 수행하는 방법으로 어떻게 만들 수 있습니까?

+0

정적 속성과 관련이 있다고 생각합니다. 두 Ping 스레드는 두 번째 연결을 도입 할 때 변경되는 것과 동일한 특성을 사용합니다. –

답변

2
public static string SERVER; 

이 필드는 정적이므로 클래스의 모든 인스턴스가 동일한 서버를 가리키고 있습니다. 두 번째 인스턴스를 만들면이 필드에 두 번째 서버의 이름이 저장되므로 첫 번째 인스턴스에서도이 인스턴스를 사용합니다.

1

모든 "정적"을 제거하십시오. 하나의 인스턴스를 생성하는 것이 아니라 클래스 객체에 대한 연결 및 기타 등등을 닫아야합니다.