Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
hatecows
1 / 1 / 1
Регистрация: 03.11.2010
Сообщений: 116
#1

Асинхронный сервер на сокетах.Как зациклить ? - C#

05.09.2011, 12:23. Просмотров 892. Ответов 1
Метки нет (Все метки)

Итак у меня есть код сервера который только принимает данные.Пожалуйста объясните в какой последовательности мне вызывать методы и что исправить, чтобы я мог подключать к серверу асинхронно сразу несколько клиентов. А то сейчас одного коннектит и выбивает. И куда вставить ConnectDone.WaitOne(); и ReceiveDone.WaitOne();

http://www.cyberforum.ru/csharp-net/thread1133418.html
Код класа:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
 
namespace Interface
{
    class ServerPart
    {
        private Socket socket;
        private int bufferSize = 1024;
        private byte[] buffer;
        private int port;
        private int listenNumber = 10;
        private IPAddress myIP;
        private IPEndPoint ipEndpoint;
 
        private ManualResetEvent ConnectDone;
        private ManualResetEvent ReceiveDone;
 
 
        public ServerPart(int Port)
        {
            buffer = new byte[bufferSize];
            port = Port;
 
               ConnectDone = new ManualResetEvent(false);
               ReceiveDone = new ManualResetEvent(false);
        }
 
        public void RunServer()
        {
                IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
                myIP = ipHost.AddressList[0];
                ipEndpoint = new IPEndPoint(myIP, port);
 
                Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sListener.Bind(ipEndpoint);
                sListener.Listen(10);
                Console.WriteLine("Waiting for connection...");
                sListener.BeginAccept(new AsyncCallback(AcceptCallback), sListener);
               
        }
 
 
        private void AcceptCallback(IAsyncResult ar)
        {
            Socket listener = (Socket)ar.AsyncState;
            Socket handle = listener.EndAccept(ar);
            ConnectDone.Set();
            handle.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(ReceiveCallback), handle);
         }
 
        private void ReceiveCallback(IAsyncResult ar)
        {
            string content = String.Empty;
            Socket handler = (Socket)ar.AsyncState;
            int bytesRead = handler.EndReceive(ar);
            if (bytesRead > 0)
                content += Encoding.Unicode.GetString(buffer, 0, bytesRead);
            if (content.IndexOf(".") > -1)//Если конец текста.(приема)
            {
                Console.WriteLine("Read{0} bytes from sockets.\n Data:{1}", content.Length, content);
            }
            else
            {
                handler.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(ReceiveCallback), handler);
            }
        }
    }
}
Вызываю так:
C#
1
2
server = new ServerPart(10000);
server.RunServer();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2011, 12:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Асинхронный сервер на сокетах.Как зациклить ? (C#):

Как написать асинхронный UDP сервер?
Дайте пожалуйста код асинхронного UDP сервера и клиента для теста, необходимо...

Сервер на сокетах: невозможно повторно запустить сервер
пишу сервер на сокетах, но надо не в консоли, а на Windows Forms, значит по...

Асинхронный сервер
всем привет. У меня есть асинхронный сервер, который получает данные следующим...

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

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

1
G.E.C.K
Vault dweller
85 / 85 / 5
Регистрация: 05.03.2011
Сообщений: 327
05.09.2011, 16:42 #2
Вот очень полезная статья где шаг за шагом создают асинхронный сервер и клиента - WinSock
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2011, 16:42
Привет! Вот еще темы с решениями:

Асинхронный сокет сервер + SSL
Здравствуйте. Требуется написать асинхронный сервер + ssl. С этим(...

Асинхронный сервер - чат, много сообщений
вобщем сделал некое подобие чата, все вроде бы хорошо - отсылает/принимает...

Асинхронный сервер, объяснить работу Callback методов
Прив. ЕОК, есть один код. Взят он с МСДН и является примером асинхронного...

Получить ip адрес клиента (асинхронный клиент - сервер)
Не могу получить ip адрес клиента (асинхронный клиент - сервер) при получении...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru