2016-05-30 3 views
-1

У меня есть программа, которая ожидает на UDP-сообщения,Хотя цикл делать что-то во время ожидания сообщения

есть способ сделать что-то в то время как он ждет UDP сообщения?

Так что программа что-то делает, но как только она получает сообщение, она идет и делает что-то еще?

благодаря

+0

Ответ на ваш вопрос: Да, возможно –

+0

Знаете ли вы, как это сделать? – George

+0

Если вы хотите сделать что-то еще, пока не получите сообщение, вы не хотите ждать. Вы хотите получать уведомление (по событию). Запустите поток слушателя, который ждет сообщения, а затем опубликуйте его через мессенджер. –

ответ

0
while (true) 
     { 
      counter += 1; 
      Console.WriteLine("Waiting for connection..."); 
      clientSocket = serverSocket.AcceptTcpClient(); 
      Console.WriteLine(" >> " + "Client No:" + Convert.ToString(counter) + " started!"); 
      handleClinet client = new handleClinet(); 
      client.startClient(clientSocket, Convert.ToString(counter)); 
     } 

Ссылка: http://csharp.net-informations.com/communications/csharp-multi-threaded-server-socket.htm

UPDATE: если вы хотите, чтобы ваш основной поток, чтобы быть свободным и создать еще один поток ждать соединений прочитать эту статью: http://www.codeproject.com/Articles/463947/Working-with-Sockets-in-Csharp

String theMessageToReceive = Encoding.Unicode.GetString(bytes, 0, bytesRec); 
    while (senderSock.Available > 0) 
    { 
     bytesRec = senderSock.Receive(bytes); 
     theMessageToReceive += Encoding.Unicode.GetString(bytes, 0, bytesRec); 
    // Do something 
    } 
+0

Можете ли вы объяснить, что это работает, пожалуйста? – George

+0

Если вы отлаживаете программу, 'while' запустится и остановится в третьей строке (в ожидании подключения), тогда будет создан новый поток для связи с этим клиентом (' handleClient'), пока сервер ждет больше. –

+0

Хорошо, но я не хочу ждать больше сообщений, я просто хочу создать цикл while, который сделает что-то еще, когда их не получил messag – George

0

Прежде всего, несколько while-loops не являются многопоточными. C# - это язык, который работает сверху вниз с помощью кода. Второе:

//create new worker 
public System.ComponentModel.BackgroundWorker worker; 
// Start new thread 
private void StartBackgroundWorker (...) {...} 
//what should the worker do 
private void worker_DoWork (...) {...} 
//if the progress has changed while working 
private void worker_ProgressChanged (...) {...} 
//thread is finished 
private void worker_RunWorkerCompleted (...) {...} 

Эти методы необходимы (и, возможно, немного больше) для выполнения этой задачи. Но я думаю, вы должны начать немного ниже, изучая C#.

Смежные вопросы