Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/39: Рейтинг темы: голосов - 39, средняя оценка - 4.74
 Аватар для afrokick
9 / 6 / 2
Регистрация: 01.08.2009
Сообщений: 30

Асинхронный сокет сервер + SSL

12.07.2011, 12:47. Показов 8100. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Требуется написать асинхронный сервер + ssl. С этим( http://msdn.microsoft.com/ru-r... tream.aspx ) примером вроде понятно. Но не получается использовать асинхронные сокеты. Подскажите пожалуйста,как это сделать или где можно узнать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.07.2011, 12:47
Ответы с готовыми решениями:

Асинхронный сокет синхронизация потоков
Нужно сделать синхронизацию каталогов на сервере и на клиенте используя неблокирующий сокет. Использую асинхронный. На сервере и на...

Как отсоединить асинхронный сокет ?
Конектю соккет : public void Connect() { IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName()); ...

Асинхронный сокет: подключение нескольких клиентов
Как сделать что-бы к серверу подключалось сразу несколько клиентов. Что я не так сделал? Как это исправить? class Program { ...

4
6 / 3 / 2
Регистрация: 21.02.2010
Сообщений: 84
12.07.2011, 14:09
Ну у меня есть пример..не знаю подойде ли тебе)

Асинхронный сервер:
C#
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
 
namespace FServer
{
    class Program
    {
        static void Main(string[] args)
        {
 
            ThreadedServer ts = new ThreadedServer(
            5000);
            ts.Start();
            Console.ReadLine();
 
        }
    }
 
 class ThreadedServer
    {
        private Socket _serverSocket;
        private int _port;
 
        public ThreadedServer(int port) { _port = port; }
 
        private void SetupServerSocket()
        {
            // Получаем информацию о локальном компьютере
            IPHostEntry localMachineInfo =
                Dns.GetHostEntry(Dns.GetHostName());
            IPEndPoint myEndpoint = new IPEndPoint(
                IPAddress.Parse("127.0.0.1"), _port);
 
            // Создаем сокет, привязываем его к адресу
            // и начинаем прослушивание
            _serverSocket = new Socket(
                myEndpoint.Address.AddressFamily,
                SocketType.Stream, ProtocolType.Tcp);
            _serverSocket.Bind(myEndpoint);
            _serverSocket.Listen((int)SocketOptionName.MaxConnections);
        }
 
        private class ConnectionInfo
        {
            public Socket Socket;
            public byte[] Buffer;
        }
 
 
        private List<ConnectionInfo> _connections =
            new List<ConnectionInfo>();
 
 
        public void Start()
        {
            SetupServerSocket();
            for (int i = 0; i < 10; i++)
                _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket);
        }
 
        private void AcceptCallback(IAsyncResult result)
        {
            ConnectionInfo connection = new ConnectionInfo();
            try
            {
                // Завершение операции Accept
                Socket s = (Socket)result.AsyncState;
                connection.Socket = s.EndAccept(result);
                connection.Buffer = new byte[255];
                lock (_connections) _connections.Add(connection);
 
                // Начало операции Receive и новой операции Accept
                connection.Socket.BeginReceive(connection.Buffer,
                    0, connection.Buffer.Length, SocketFlags.None,
                    new AsyncCallback(ReceiveCallback),
                    connection);
                _serverSocket.BeginAccept(new AsyncCallback(
                    AcceptCallback), result.AsyncState);
            }
            catch (SocketException exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Socket exception: " +
                    exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Exception: " + exc);
            }
        }
 
        private void ReceiveCallback(IAsyncResult result)
        {
            ConnectionInfo connection =
                (ConnectionInfo)result.AsyncState;
            try
            {
                int bytesRead =
                    connection.Socket.EndReceive(result);
                string s = System.Text.Encoding.Unicode.GetString(connection.Buffer,0,bytesRead)+"_mds";
                byte[] b = Encoding.Unicode.GetBytes(s);
                if (0 != bytesRead)
                {
                    lock (_connections)
                    {
                        foreach (ConnectionInfo conn in
                            _connections)
                        {
                            if (connection != conn)
                            {
                                conn.Socket.Send(b,
                                    bytesRead+8, SocketFlags.None);
                            }
                        }
                    }
                    connection.Socket.BeginReceive(
                        connection.Buffer, 0,
                        connection.Buffer.Length, SocketFlags.None,
                        new AsyncCallback(ReceiveCallback),
                        connection);
                }
                else CloseConnection(connection);
            }
            catch (SocketException exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Socket exception: " +
                    exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Exception: " + exc);
            }
        }
 
        private void CloseConnection(ConnectionInfo ci)
        {
            ci.Socket.Close();
            lock (_connections) _connections.Remove(ci);
        }
    }
}
и асинхронный клиент к нему:

C#
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
 
namespace FClient
{
    class Program
    {
        static Thread sendCom;
        static Thread getCom;
        static NetworkStream stream;
        static Socket client;
 
 
        static void Main(string[] args)
        {
              Connect("127.0.0.1");
              Thread.Sleep(1000);
        }
 
        static void Connect(String server)
        {
            try
            {
                IPEndPoint iep = new IPEndPoint(IPAddress.Parse(server), 5000);
                client = new Socket(iep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                client.BeginConnect(iep, new AsyncCallback(ConnectedTo), client);
 
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine("ArgumentNullException: {0}", e);
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
 
        }
 
        static void ConnectedTo(IAsyncResult iar)
        {
            try
            {
                client.EndConnect(iar);
 
                sendCom = new Thread(new ThreadStart(SendTo));
                sendCom.Name = "sdfd";
                sendCom.Start();
                getCom = new Thread(new ThreadStart(ReceiveData));
                getCom.Name = "RforCL";
                getCom.IsBackground = true;
                getCom.Start();
 
            }
            catch (SocketException)
            {
                Console.WriteLine("2000");
                Console.ReadLine();
            }
        }
 
        static void ReceiveData()
        {
            byte[] data = new byte[1024];
            int recv;
            string stringData;
            while (true)
            {
                try
                {
                    recv = client.Receive(data);
                }
                catch
                {
                    Console.WriteLine("2000");
                    Console.ReadLine(); 
                    break;
                }
                stringData = Encoding.Unicode.GetString(data, 0, recv);
                Console.WriteLine("Received: {0}", stringData);
            }
            return;
        }
 
        public static void SendTo()
        {
            try
            {
                while (true)
                {
                    string message = Console.ReadLine();
                    Byte[] data = System.Text.Encoding.Unicode.GetBytes(message);
                    client.BeginSend(data, 0, data.Length, 0, new AsyncCallback(SendDataSr), client);
                }
            }
            catch
            {
                Console.WriteLine("2000");
                Console.ReadLine();
            }
        }
 
        static void SendDataSr(IAsyncResult iar)
        {
            Socket remote = (Socket)iar.AsyncState;
            int sent = remote.EndSend(iar);
        }
 
        static byte[] data = new Byte[256];
 
    }
}
1
 Аватар для afrokick
9 / 6 / 2
Регистрация: 01.08.2009
Сообщений: 30
12.07.2011, 23:00  [ТС]
спасибо, таких примеров много) Мне бы с SSL. Как я понял можно работать через TcpListen и TcpClient c ssl.

Еще проблемка возникла. При проверки сертификата вылетает такая ошибка: "Удаленный сертификат недействителен согласно результатам проверки подлинности". Возможно я неправильно создал сертификат на makecert для сервера.
0
 Аватар для afrokick
9 / 6 / 2
Регистрация: 01.08.2009
Сообщений: 30
17.07.2011, 14:01  [ТС]
Кто-нибудь может помочь, неделю уже голову ломаю
0
ДмитрийСт
22.04.2013, 07:37
Наверняка кому-то пригодится.
Если вы создали сертификат SSL сами, а не заказали, заплатив деньги, в центре сертификации, то у вас так называемый "самоподписанный" сертификат. Как следствие он не пройдёт проверку на "доверенность".
Чтобы пользоваться таким сертификатом "для себя" его можно зарегистрировать в своей ОС как "доверенный" . Вот тут есть инструкция как это сделать.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2013, 07:37
Помогаю со студенческими работами здесь

Исправление одного подключения (асинхронный сокет)
Пишу асинхронный сокет. У меня существует 2 ошибки: 1) Когда я подключился клиентом к серверу и отправил сообщение он принял в ответку,...

Асинхронный сервер
всем привет. У меня есть асинхронный сервер, который получает данные следующим образом: private void OnRecieved(IAsyncResult ar) { ...

Асинхронный клиент-сервер
Здравствуйте. Вот уже 3 дня бьюсь над проблемой, решение которой не могу найти. Вообщем, коротко говоря, имеется серверное приложение,...

Асинхронный сервер не отвечает
Добра. Написал асинхронных сервер сервер и клиент для чата. Порядок работы примерно таков: Клиент подключается к серверу Сервер...

Асинхронный сервер и DotNetty
Подскажите, как прикрутить к серверу DotNetty, чтобы сделать сервер асинхронным. Всё на C#.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru