Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Net.Sockets.TcpListener / 2 сообщений из 2, страница 1 из 1
04.03.2005, 19:47
    #32947341
Leenoox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Net.Sockets.TcpListener
Пишу тестовую программу клиент-сервер для пересылки текстовых сообщений.

вот сервер:

Dim MyIP1 As Net.IPAddress
Dim message As String
Dim B As String = Nothing
Dim tStream As Net.Sockets.NetworkStream 'Stream
Dim byte1(1024) As [Byte] 'Buffer
MyIP1 = MyIP1.Parse("127.0.0.1")
Dim MyListener As New TcpListener(MyIP1, 21000)

MyListener.Start()
'While True 'в моем случае может быть любое другое условие
Dim CLient As Net.Sockets.TcpClient
CLient = MyListener.AcceptTcpClient() 'вот здесь обычно ждет клиента
tStream = CLient.GetStream()
message = tStream.Read(byte1, 0, byte1.Length)
B = System.Text.Encoding.ASCII.GetString(byte1, 0, message)
RichTextBox1.Text = B
CLient.Close()
'End While
MyListener.Stop()

В таком виде все работает, но пересылается только ОДНО сообщение, после чего, естественно, прием прекращается и надо опять запускать процедуру. Убираю апострофы с /'While/ и с /'End While/, в результате:
RichTextBox1.Text - пустой.
Процедуру зацикливает.

Делаю отладку, вижу, что программа останавливается и ждет на строке
CLient = MyListener.AcceptTcpClient() пока не придет сообщение от клиента, то есть когда произойдет
MyListener.pending = True
Почему тогда процедуру циклит без апострофов?
Подскажите пожалуйста, как сделать так, чтобы процедура всегда была в состоянии приема сообщений от клиента.
Или как описать событие OnMyListener.Pending()?
Я новичок в этой области. Наверно, чего-то недопонимаю...
Спасибо.
...
Рейтинг: 0 / 0
07.03.2005, 14:16
    #32949585
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Net.Sockets.TcpListener
недавно писал винсок клиент/сервер, выдираю прямо из рабочего кода, без особых причесок и к сожалению на c#, но, думаю здесь главное понимание алгоритма:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
        static public void Start()
		{
			if (_listner != null)_listner.Stop ();
			Stop();
			_StopListening = false;
 
			 
			try
			{

				_listner = new TcpListener(IPAddress.Any , port) ; 
				// Start listening for client requests.
				_listner.Start ();
				// поток обработки соединений
				ThreadPool.QueueUserWorkItem ( new WaitCallback (WaitForClient));
				// поток обработки очереди клиентов
				ThreadPool.QueueUserWorkItem ( new WaitCallback (ProcessClientQueueThread));
				
				
				
			}
			catch (SocketException e)
			{
				...
			}
			finally
			{
                                 ...
			}
     		
		}

		static int _clientCount = 0;
		private static void WaitForClient(object target)
		{
			 
			
			try
			{
				//главный цикл
				while (_StopListening == false)
				{

					// принимаем клиента
					if (_listner.Pending())
					{			
					   lock(_clients)_clients.Enqueue ( _listner.AcceptTcpClient() );
					   _clientCount++;
						
					}
					Thread.Sleep( _delay); 
				}
			}
			catch (Exception e)
			{
				System.Diagnostics.Debug.WriteLine ( e.ToString ());
			}
			finally
			{
				_listner.Stop ();
                                  _StopListening = false;

			}

		}

                 /// <summary>
		/// цикл обработки очереди клиентов
		/// </summary>
		private static void ProcessClientQueueThread(object target)
		{
			while ( _StopListening == false)
			{
				TcpClient client = null;
				lock(_clients)
				{
					if (_clients.Count > 0)
					  client = (TcpClient)_clients.Dequeue ();
				}
                                  if (client!=null) ApplyClientData ( client );
                                  Thread.Sleep( _delay ); 
				
			}
			_StopListening = false;
		}



...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Net.Sockets.TcpListener / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]