TcpClient prblemik z braku wiedzy

0

Jak wykonać skrypt coś w stylu np. połączenia w jakimś komunikatorze że jak się daje połącz to program próbuje się podłączyć serverem ileś tam razy i zostaje w pozycji disconnect jak się nieda. I również jak nie ma dostepu do sieci robi podobną sztuczke.

próbowałem z TcpClient.connect ale jak rozwiązałem te podejścia ponowne do połączenia sprawdzając connected to zaś mi się wywalał na braku podłączenia do sieci pakował wyjątek i nie bardzo ogarniam jak to zrobić może jakieś nakreślenie problemu czy coś mi pomoże proszę o jakieś podpowiedzi.

Dziękuje za pomoc.

1

Jeżeli dobrze rozumiem (a w tym przypadku ciężko zrozumieć) to powinieneś się zainteresować blokiem try... catch i łapać odpowiedni wyjątek w razie problemów z połączeniem (czyli zapewne SocketException ).

// dopisane

np.

private void foo(int attempts)
{
	if (attempts > 3)
		return;

	try { TcpClient client = new TcpClient(); client.connect("jabber.org", 5222); this.stream = client.GetStream(); } catch(SocketException se) { foo(attempts+ 1); }
}

i odpalasz np. w buttonie na początek foo(0);

0
public class Network
	{
		private String server;
		private Int32 port;
		private TcpClient client;
		private NetworkStream stream;
		private Byte[] receiveBuff;
		private Int32 receiveBuffSize;
		private Byte[] sendBuff;
		protected Boolean connected = false;
		
		public Network(String server, Int32 port)
		{
			this.server = server;
			this.port = port;
		}
		
		public void Connect()
		{		
			if(!this.connected)
			{
				int attemp = 0;
				try
				{
					if(attemp < 10)
					{	
						this.client = new TcpClient();
						this.client.Connect(this.server, this.port);
						this.stream = this.client.GetStream();
						this.connected = this.client.Connected;
					}
				}
				catch(SocketException)
				{
					if(attemp > 10)
					{
						this.Disconnect();
					}
					attemp++;
				}
			}
		}
		
		public void Disconnect()
		{
			if(this.connected)
			{
				this.stream.Close();
				this.client.Close();
				this.connected = false;
			}
		}
		
		public String Receive()
		{
			if(this.connected)
			{
				this.receiveBuffSize = this.client.ReceiveBufferSize;
				this.receiveBuff = new Byte[this.receiveBuffSize];
				this.stream.Read(receiveBuff, 0, this.receiveBuffSize); 
				return Encoding.UTF8.GetString(this.receiveBuff, 0, this.receiveBuffSize).Replace(" ","");
			}
			else
			{
				this.Disconnect();
				return "";
			}
			
		}
		
		public void Send(String msg)
		{
			if(this.connected)
			{
				this.sendBuff = Encoding.ASCII.GetBytes(msg);
				this.stream.Write(this.sendBuff, 0, this.sendBuff.Length);
				this.stream.Flush();
			}
			else
			{
				this.Disconnect();
			}
		}
	}

Oto cała klasa poprawiona ale teraz mi się wiesz jak ktoś 2 raz przyciśnie connect i jak się rozłączy i znowu chce połączyć to się nic nie dzieje stoi jak by w miejscu.

0

Czyli proponujesz żeby sprawdzać czy client jest pusty jeśli tak to uznajemy że nie nawiązano połączenia. O to ci chodziło

1 użytkowników online, w tym zalogowanych: 0, gości: 1