82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6

Асинхронные сокеты: Как организовать разделение на прием сообщений и прием файлов

01.05.2012, 00:11. Показов 2970. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изучив синхронные сокеты, перешел к изучению асинхронных. Столкнулся вот с чем, как, используя асинхронные сокеты, сделать на стороне сервера обработку поступающих данных, то есть если клиент отправил сообщение, то сервер должен понять что ему надо принять сообщение, а если клиент начал отправлять файл, то сервак должен начать принимать файл. На синхронных сокетах это делал следующим образов:

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
private void StartListening()
        {
            while (true)
            {
                ...
                            //цикл, для отлова полученной команды от пользователя
                            while (client.Socket.Connected)
                            {
                                //запись поступившей команды в переменную
                                int Command = Convert.ToInt32(GetCommand(client.Socket));
                                //после получения команды, идет выбор действий для каждой команды
                                switch (Command)
                                {
                                    //получение сообщения от пользователя серверу
                                    case 1:
                                        msg = GetCommand(client.Socket);
                                        onClientSendMessenge(new ClientSendMessageEventArgs(msg, client.Ip, client.User_name));
                                        break;
                                    //получение файла от пользователю серверу
                                    case 2:
                                        msg = ReceiveFileFromClient(client.Socket);
                                        onClientSendFileToServer(new ClientSendFileToServerEventArgs(msg, client.Ip, client.User_name));
                                        break;
                                    //отправка сообщения указанному пользователю от другого пользователя
                                    case 3:
                                        SendMsgToAnotherClient(client);
                                        break;
                                    //отправка файла указанному пользователю от другого пользователя
                                    case 4:
                                        ReceiveFileFromClient(client.Socket);
                                        SendFileToAnotherClient(client);
                                        break;
                                    //отключения пользователя при его выходе из программы
                                    case 0:
                                        Count--;
                                        client.Socket.Disconnect(false);
                                        Clients.Remove(client);
                                        SendAllIpToAllUsers(GetAllIpAdress());
                                        OnClientDisconected(new ClienTDisconnectedEventArgs(client.Ip));
                                        break;
                                    default:
                                        break;
 
                                };
                    ...
        }
Как сделать подобное, используя асинхронные сокеты?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.05.2012, 00:11
Ответы с готовыми решениями:

Как организовать прием СМС сообщений на сервере и чтоб пользователи могли читать их на компе
Добрый день всем! Никто не сталкивался с такой задачей: организовать прием СМС сообщений на сервере и чтоб пользователи могли читать их на...

Сокеты, приём данных
В общем написал более-менее работающий клиент и сервер общающиеся между собой на асинхронных сокетах. До этого с сокетами не сталкивался....

Прием структуры через сокеты
добрый день, пытаюсь передать структуру через сокет вот структура struct ForSend //structure for sending data to the server { ...

2
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
01.05.2012, 04:34
можно отправить серверу сообщение типа "ща пришлю файл.txt размер 100байт"
сервер после получения этой радости будет принимать указанное кол-во данных, потом можно сохранить и т.п
0
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
01.05.2012, 13:10  [ТС]
m0nax, это понятно, но файл и данные же будет посылаться разными методами, или я ошибаюсь? BeginSend - сообщения и т.п., BeginSendFile - файл. Мне бы придумать переключатель на стороне сервера, как это показано в первом моем сообщении.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.05.2012, 13:10
Помогаю со студенческими работами здесь

Сокеты. Прием данных клиентом от сервера
Здравствуйте. Задача такая: Клиент отправляет серверу данные, сервер, исходя из полученных данных, обращается к БД, результат запроса нужно...

Сокеты: отпрака/прием строки с непечатными символами
Добрый вечер. Есть простенькая реализация клиента и сервера, которые обмениваются некоторыми данными. Формат примерно такой...

Прием сообщений от сервера
Здравствуйте, уважаемые форумчане! Такая проблема возникла. Пишу клиент-серверное приложение, в котором сервер должен через определенный...

Прием сообщений IdIRC
Здравствуйте. Как сделать прием сообщений? IdIRC. Коннект идет по кнопке (idIRC1.Nick:=':Nick'; idIRC1.Password:=rdtd; ...

Прием почтовых сообщений
Нашел такой код сделал тестовый почтовый ящик и решил попробовать: procedure TForm1.Button2Click(Sender: TObject); begin ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru