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

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2012, 00:11
Ответы с готовыми решениями:

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

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

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

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

2
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
01.05.2012, 04:34 2
можно отправить серверу сообщение типа "ща пришлю файл.txt размер 100байт"
сервер после получения этой радости будет принимать указанное кол-во данных, потом можно сохранить и т.п
0
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
01.05.2012, 13:10  [ТС] 3
m0nax, это понятно, но файл и данные же будет посылаться разными методами, или я ошибаюсь? BeginSend - сообщения и т.п., BeginSendFile - файл. Мне бы придумать переключатель на стороне сервера, как это показано в первом моем сообщении.
0
01.05.2012, 13:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2012, 13:10
Помогаю со студенческими работами здесь

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

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

Прием сообщений IdIRC
Здравствуйте. Как сделать прием сообщений? IdIRC. Коннект идет по кнопке...

Прием почтовых сообщений
Нашел такой код сделал тестовый почтовый ящик и решил попробовать: procedure...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru