Параллельная работа сокетов в C#. Потоки в C# using System; using System.Threading; public class ThreadExample { public static void ThreadProc() { for.

Презентация:



Advertisements
Похожие презентации
Низкоуровневые операции в ИС. Сокеты в C#. Понятие сокета Если требуется получить доступ к сетевым операциям низкого уровня, в программе следует использовать.
Advertisements

Test21 Вопрос 1. public class Test { void a1(Object... i){ System.out.println("[Object... i]"); } void a1(Integer... i){ System.out.println("[Integer...
Многопоточность в Java. Понятие потока Поток – это одна из веточек вычислительного процесса. Каждый поток выполняет свои действия в пределах одного приложения.
1 using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; 2 namespace.
Сокеты TCP/IP Лекция Понятие сокета Если требуется получить доступ к сетевым операциям низкого уровня (класс URL обеспечивает выполнение только.
Модель приложений.NET. Среда платформы Win32, в которой выполняется программа, называется ее процессом. Эта среда состоит из: адресного пространства,
1 A + B Операнд 1Операнд 2 Оператор Что такое выражение (expression) ? Что такое инструкция (statement) ? Операторы int max = (a > b) ? a : b;
Функции с переменным числом аргументов private static int Sum(int a, int b) { return a + b; } static void Main() { int sum = Sum(1, 2); } 1 Функции.
Test 9 Вопрос 1. public class A { private String runNow() { return "High"; } static class B extends A { public String runNow() { return "Low"; } } public.
Test 12 Вопрос 1. public class Cast { public static void main (String[] args){ byte b = 128; int i = b; System.out.println(i); } } a)Во время выполнения.
Сетевое программирование. История TCP/IP 1969 году в фирме Defense Advanced Research Projects (DARPA) Larry Roberts придумал создать сеть компьютеров,
UDP сокетыUDP сокетыПротокол пользовательских дейтаграмм(UDP) Протокол UDP намного проще, чем ТСР; он полезен в ситуациях, когда мощные механизмы обеспечения.
Обработка исключительных ситуаций, работа с файлами Исключительные ситуации Классы File, InputStream, RandomAccessFile, FileReader, BufferedReader, BufferedWriter,
Test 13 Вопрос 1. public class StringTest { public static void main(String[] arg){ test(new String[] { null });} static void test(Object[] o){System.out.print(1);}
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Test 16 Вопрос 1. class Clazz { { System.out.println("non-static init"); } public static void main(String a[]) { System.out.println("main"); Clazz ob1.
Объектные интерфейсы (.NET) «Школа Инноваций InterSystems 2007»
ПОТОКИ Начальные сведенияПОТОКИ Начальные сведения.
Test 4 Вопрос 1. public class TestOutput { public static void main(String[] args) throws IOException { PrintStream out = new PrintStream( new BufferedOutputStream(
Test 5 Вопрос 1. В результате компиляции каких строк будет происходить ошибка компиляции: public class Main { public static void main(String[] args) {
Транксрипт:

Параллельная работа сокетов в C#

Потоки в C# using System; using System.Threading; public class ThreadExample { public static void ThreadProc() { for (int i = 0; i < 10; i++) { Console.WriteLine("ThreadProc: {0}", i); Thread.Sleep(0); }

Потоки в C# public static void Main() { Console.WriteLine("Main thread: Start a second thread."); Thread t = new Thread(new ThreadStart(ThreadProc)); t.Start(); for (int i = 0; i < 4; i++) { Console.WriteLine("Main thread: Do some work."); Thread.Sleep(0); } Console.WriteLine("Main thread: Call Join()"); t.Join(); Console.WriteLine("Main thread: ThreadProc.Join has returned"); Console.ReadLine(); }

Потоки в C# Объявление и создание потока, указывается метод-цель Thread t = new Thread(new ThreadStart(ThreadProc)); Запуск потока t.Start(); Приостановка потоков t.Suspend(); Возобновление приостановленного потока t.Resume();

Потоки в C# Ожидание завершения потока t.Join(); Состояние ожидания и передача управления Thread.Sleep(0);

1 шаг изменения программы-сервера Создадим метод run(), в задачи которого входит создание потока, чтение данных, их преобразование и запись в поток. Фактически, здесь сосредоточена вся работа с клиентом. Подключим: using System.IO; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading;

Глобально объявим: public static TcpClient client; public static TcpListener server; private static System.Threading.Thread t;

Метод run() public static void run(TcpClient client) { Byte[] bytes = new Byte[256]; NetworkStream stream = client.GetStream(); int i; i = stream.Read(bytes, 0, bytes.Length); String data = System.Text.Encoding.UTF8.GetString(bytes, 0, i); Console.WriteLine(String.Format("Received: {0}", data)); data = data.ToUpper(); byte[] msg = System.Text.Encoding.UTF8.GetBytes(data); stream.Write(msg, 0, msg.Length); Console.WriteLine(String.Format("Sent: {0}", data)); client.Close(); Console.WriteLine("Close"); }

2 шаг используем метод run в цикле ожидания подключения клиента while(true) { Console.Write("Waiting for a connection... "); client = server.AcceptTcpClient(); Console.WriteLine("Connected!"); run(client); } Пока клиенты работают с сервером последовательно.

3 шаг -используем потоки для обеспечения параллельной работы сокетов Добавим: using System.Threading; Глобально объявим: private System.Threading.Thread t; Создадим метод public static void ThreadProc() { run(client); }

4 шаг - создадим поток в цикле ожидания подключения клиента while(true) { Console.Write("Waiting for a connection... "); client = server.AcceptTcpClient(); Console.WriteLine("Connected!"); t=new Thread(new ThreadStart(ThreadProc)); t.Start(); }

5 шаг запуск сервера оформим в виде метода serverwork() public static void serverwork() { try { Int32 port=13000; IPAddress localAddr=IPAddress.Parse(" "); server=new TcpListener(localAddr,port); server.Start(); Byte[] bytes = new Byte[256]; while(true) {

Console.Write("Waiting for a connection... "); client = server.AcceptTcpClient(); Console.WriteLine("Connected!"); //run(client); t=new Thread(new ThreadStart(ThreadProc)); t.Start(); } catch(SocketException ex) { Console.WriteLine("SocketException: {0}", ex); }

6 шаг создадим метод, который запускает сервер public static void ThreadProc1() { serverwork(); }

7 шаг – кнопка «Запуск сервера» private void button3_Click(object sender, System.EventArgs e) { t=new Thread(new ThreadStart(ThreadProc1)); t.Start(); }

8 шаг – кнопка «Останов сервера» private void button2_Click(object sender, System.EventArgs e) { if (server!=null) { server.Stop(); t.Abort(); }

9 шаг – событие «Закрытие формы» private void Form1_Closed(object sender, System.EventArgs e) { if (server!=null) { server.Stop(); t.Abort(); }