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

вот сервер:

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
Net.Sockets.TcpListener
    #32949585
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
недавно писал винсок клиент/сервер, выдираю прямо из рабочего кода, без особых причесок и к сожалению на 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
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Net.Sockets.TcpListener
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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