программирование сокетов в C # - PullRequest
1 голос
/ 10 марта 2011

Я пытаюсь заняться программированием Socket на C #, и теперь мне нужно понять, нужен ли нам массив сокетов на стороне сервера для обработки нескольких клиентов или одного сокета на стороне сервера достаточно для обработка многих клиентов;

И необходимо настроить, были ли достигнуты все данные с сервера на клиент, и доступность сервера, отбрасывая клиентский запрос.

Нужно ли нам создавать несколько потоков для обработки каждого клиента? и мне нужно обращаться с каждым клиентом отдельно.

Ответы [ 5 ]

6 голосов
/ 10 марта 2011

Каждое соединение потребует нового сокета. Как говорит spender , вы слушаете только один сокет, API сокетов создаст другие сокеты при поступлении запросов на подключение.

Чтение документации для accept

1 голос
/ 10 марта 2011

Один сокет прослушивания может обслуживать множество клиентов.

0 голосов
/ 02 декабря 2012

вы создаете одного слушателя (сокет приветствия), который создает выделенный сокет подключения для каждого принятого клиента.

Я думаю, тебе нужна какая-то вещь.

private void listen(){

TcpListener listener = new TcpListener(5000);
listener.Start();
while (true)
{
  // Accept a new client
  Socket clientSocket = listener.AcceptSocket();
  //Create a thread for every client.
  ParameterizedThreadStart pThreadStart = new ParameterizedThreadStart(handleClient);
  Thread thread = new Thread(pThreadStart);
  thread.Start(clientSocket);
 }
}
0 голосов
/ 10 марта 2011

Пожалуйста, посмотрите на Написание масштабируемых серверных приложений с использованием IOCP . Это хорошее руководство по созданию надежного серверного приложения.

0 голосов
/ 10 марта 2011

Вы можете использовать один сокет для ответа нескольким клиентам. Когда клиент соединяется с сервером, ваше приложение создает сокет для участия в этом соединении.

...