Чат для локальной сети

С расширением офисной локальной сети зачастую встает вопрос о том, какие средства коммуникации между сотрудниками использовать. Особенно это актуально, если рабочие места разнесены по разным комнатам или соседним зданиям. Для решения данного вопроса существует специальная программа чат для локальной сети. Таких сервисов огромное множество, так что можно подобрать под офис такую, которая бы удовлетворяла всех сотрудников и решала в полной мере поставленные задачи. Можно использовать серверные чаты или программы, работающие без серверов, платные или бесплатные.

Для чего нужна программа чат для локальной сети

Довольно часто можно услышать мнение: для чего же нужен чат для локалки, ведь есть электронная почта? Здесь однозначного ответа не существует, но можно выделить следующие преимущества использования локальных мессенджеров для общения:

  • нет необходимости использовать интернет для общения внутри LAN;
  • не нужно ставить дополнительные сервера, и разворачивать на них почтовые сервисы или службы обмена сообщениями;
  • чат может поставить себе любой пользователь без специальных навыков и умений и пользоваться им;
  • утечка информации из интранет просто невозможна, в то время, как почтовые сервисы, особенно общественные, постоянно подвергаются атакам и наблюдаются спецслужбами.

Это основные преимущества, но далеко не все. Чат позволяет вести рассылку точечно или отдельным группам. Сообщения приходят мгновенно, и можно видеть уведомление на экране монитора. Не нужно заполнять поля «Кому» и «Тема», как в почтовых службах. Можно передавать файлы без ограничения по размеру и другие данные. Рассмотрим несколько программ, позволяющих создавать бесплатный чат для локальной сети в качестве примера. Они завоевали популярность среди людей и активно используются в качестве корпоративных или домашних средств обмена сообщениями.

Бесплатный чат для локальной сети — MyChat

Утилита MyChat на наш взгляд наиболее удачное решение. Она подойдет для использования в небольших локальных сетях, бесплатная версия ограничивается 15 компьютерами, или же в платной версии без ограничений. Бесплатная версия имеет еще несколько отличий от коммерческой, например, нет возможности взаимодействия с Active Directory, но в небольшом офисе вряд ли будет стоять такой сервер.

Чтобы начать использовать MyChat необходимо предварительно установить ее сервер на одном из компьютеров, например, на компьютере руководителя, а все остальные клиенты будут подключаться через него. Сервер выполняет следующие функции:

  • собственно, сам бесплатный чат для локальной сети, что позволяет подключаться клиентам, ведет их статистику (время в сети, показатели трафика, количество подключений и др.);
  • выполняет роль файлового сервера с доступом по протоколу FTP;
  • разграничивает пользователей по группам, правам доступа (можно назначить нескольких администраторов);
  • фильтрует пользователей и сообщения по установленным признакам.

Через сервер можно создавать доски объявлений и рассылки, используя скрипты для часто повторяемых действий. Настройка может производиться непосредственно через интерфейс самой программы, а также через Веб-интерфейс. Есть возможность более тонкой настройки для резервирования данных, ведения протоколов, удаленному управлению компьютерами и пр.

На компьютерах пользователей необходимо установить MyChat клиент, чтобы подключиться к серверу. Клиент позволяет вести переписку через каналы, регистрироваться в них или вести приватные разговоры, шифруемые специальными протоколами, передавать файлы, просматривать доски объявлений. Особое внимание стоит уделить гибкости программы за счет устанавливаемых плагинов. Плагины в значительной мере расширяют возможности клиента.

QChat — чат для локальной сети без сервера

Еще одна замечательная утилита, заслуживающая внимание — это Qchat. Она позволяет организовать чат для локальной сети без сервера, что иногда просто необходимо в некоторых случаях. Программа имеет следующие возможности:

  • работа с каналами позволяет объединить несколько компьютеров или же обмен сообщениями в приватном режиме один на один;
  • настраиваемый шрифт и его размер в окне сообщений;
  • возможность вставлять различные смайлики;
  • можно настроить карточку пользователя, т.е. его имя, адрес, телефон и другие данные;
  • предусмотрена возможность отправки файлов без ограничения по размеру;
  • широковещательные рассылки по всем пользователям, или по клиентам из списка.

QChat не требует установки и может быть запущена как портативная даже со съемного носителя. Единственным недостатком является то, что логи сообщений не ведутся, поэтому после выхода вся переписка будет стерта. Это решается если использовать серверную версию QChat, а такую возможность разработчики также предусмотрели.

What is Vypress Chat

Vypress Chat is a user-friendly application for real-time chatting in small office or home office (SOHO) local networks. This unique chat software features an easy-to-understand format for text-based conferences and discussions. Vypress Chat does not require an Internet connection or a dedicated server to support discussions, and all users have equal access to the application’s tools and functions. Vypress Chat enables individuals to instantly communicate about joint projects, and managers can send instantaneous memos to individuals, departments, or the entire company.

Current version:
2.1.9
Thursday, June 16, 2011
Client Platforms:
Windows 95
Windows 98
Windows Me
Windows NT 4.0
Windows 2000
Windows XP
Windows 2003
Windows Vista
Windows Vista x64
Supported protocols:
TCP/IP

No Network Management Needed

At VyPRESS, we recognize that most small local area networks (s) have no professional network administrator to manage software installation and provide user training. Thus, one of our major goals when creating Vypress Chat was to develop chat software with absolutely zero management requirements. To achieve this, we deliberately left out certain advanced configuration features in order to make Vypress Chat 100% chat-ready immediately after installation. Now, all you need to create the easiest and most comfortable “talk environment” available for your network is to install the all-new Vypress Chat!

Getting Started is Easy

After installation, Vypress Chat will automatically start with Windows, and the appropriate icons will be added to the notification area of the Taskbar (near the clock). At startup, all Vypress Chat users in the network will join one common chat channel (#Main). However, users are not limited to this one channel — they can create as many new channels as desired and initiate private discussions on completely private channels. Users can also send messages at any time to other online “buddies” (all users are visible who have Vypress Chat running in your network).

Программы для чата в локальной сети — чаты для интра сети

Users can send and receive instant messages and begin chatting immediately after installation.

Research & Development Pays Off

We created Vypress Chat after studying how busy professionals use their computers and networks in actual working environments. As a result of these studies, during development we concentrated on usefulness, efficiency and simplicity. The result? Vypress Chat’s interface is attractive, simple-to-use and customizable, and Vypress Chat offers you features similar to the best aspects found in our competitor’s applications. You get an interface comparable to mIRC’s graphical interface, and system tray functionality similar to that of ICQ.

If you have computers connected in your home or office, Vypress Chat takes full advantage of your network to enrich communication and streamline productivity!

Основы работы с сетями в C# и .NET

Введение в сети и протоколы

Последнее обновление: 31.10.2015

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

Но прежде чем переходить непосредственно к созданию приложений, надо пару слов сказать, что вообще представляет собой коммуникация в сети.

Вся сеть состоит из отдельных элементов — хостов, которые представляют собой компьютеры и другие подключенные устройства. Между собой они соединены каналами связи (кабели Ethernet, Wi-Fi и т.д.) и маршрутизаторами. Маршрутизаторы объединяют компьютеры в подсети и контролируют передачу данных между ними.

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

Существует множество различных протоколов. Протоколы, которые используются для передачи данных по сети, составляют семейство протоколов TCP/IP. Основные из них: Internet Protocol (IP), Transmission Control Protocol (TCP) и User Datagram Protocol (UDP). Причем эти протоколы организованы в уровневую систему:

IP представляет сетевой уровень. Он использует нижележащие уровни, которые представляют физические каналы коммуникации — кабели Ethernet и т.д., для передачи пакетов с данными другому хосту.

Выше IP располагается транспортный уровень, который образуют протоколы TCP и UDP. Эти протоколы используют определенные порты для передачи данных. TCP позволяет отследить потерю пакетов и их дублирование при передаче. UDP подобного не позволяет сделать и нацелен на простую передачу данных.

Однако приложение взаимодействует с уровнем TCP / UDP не напрямую, а через специальный API, который предоставляют сокеты. Сокеты — это не какой-либо протокол, это просто интерфейс для создания сетевых приложений, который опирается на встроенные возможности операционной системы.

В зависимости от используемого протокола различают два вида сокетов: потоковые сокеты (stream socket) и дейтаграммные сокеты (datagram socket). Потоковые сокеты используют протокол TCP, дейтаграммные — протокол UDP.

В итоге, когда приложение посылает сообщение приложению, запущенному на другом хосте, то приложение обращается к сокетам для передачи данных на уровень TCP / UDP. Далее с этого транспортного уровня данные передаются сетевому уровню — уровню протокола IP. И этот протокол передает данные далее физическим уровням, и после этого данные уходят по сети.

Чтобы уникально определять хосты в сети каждый хост имеет адрес. Существует несколько различных протоколов адресов. В настоящее время наиболее распространен протокол IPv4, который предполагает представление адреса в виде 32-битного числа, например, 37.120.16.63. Такой адрес содержит четыре числа, разделенных точками, и каждое число находится в диапазоне от 0 до 255. Однако также в последнее время набирает оборот использование адресов протокола IPv6, которые представляют собой 128-битное значение.

Однако такие адреса очень сложно запомнить, поэтому в реальности чаще оперируют доменами. Домены представляют специальные названия, используемые для интернет-адресов. Например, есть доменное имя «www.microsoft.com», ему соответствует адрес в формате IPv4 2.23.143.150. Но для протокола IP, через который идет взаимодействие, доменные адреса не существуют. Поэтому при отправке или передаче данных по доменному имени, компьютер еще обращается к службам Domain Name System (DNS), который выполняют сопоставление между интернет-адресами в формате IPv4 или IPv6 и доменными названиями.

Кроме адреса при сетевых взаимодействиях используются порты. Порт представляет 16-битное число в диапазоне от 1 до 65 535.

LAN Messenger — Чат в локальной сети без сервера

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

Собственно, это все базовые принципы взаимодействия по сети, которые надо знать. В реальности, как правило, при создании приложений не потребуется глубокого знания всех протоколов и нюансов их работы. Если в редких случаях возникнет необходимость более детального знания протоколов, то в этом случае можно обратиться к специализированной литературе, например, к книгам Олифера или Танненбаума.

СодержаниеВперед

Brian «Beej Jorgensen» Hall
beej@beej.us

Version 3.0.14
September 8, 2009

Copyright © 2009 Brian «Beej Jorgensen» Hall

Оригинал материала: http://beej.us/guide/bgnet/

1.

Введение

1.1 Аудитория
1.2 Платформа и компилятор
1.3 Официальная страница и книги
1.4 Программистам Solaris и SunOS
1.5 Программистам Windows
1.6 E-Mail политика
1.7 Зеркалирование
1.8 Copyright и распространение

2. Что такое сокет?

2.1 Два типа Интернет-Сокетов
2.2 Теория сетей и низкие уровни

3. IP-адреса, структуры, и передача данных

3.1 IP-адреса, версии 4 и 6
3.2 Порядок следования байт
3.3 Структуры
3.4 IP-адреса, часть два

4. Переход от IPv4 к IPv6

5. Системные вызовы

5.1 getaddrinfo() — готовимся к запуску!
5.2 socket() — создаём дескриптор файла!
5.3 bind() — на каком я порту?
5.4 connect() — Эй, ты!
5.5 listen() — Кто-нибуть может мне позвонить?
5.6 accept() — спасибо за звонок на порт 3490.
5.7 send() и recv() — поговори со мной, детка!
5.8 sendto() и recvfrom() Поговрии со мной дейтаграммами!
5.9 close() и shutdown() — Уйди с глаз моих!
5.10 getpeername() — ты кто такой?
5.11 gethostname() — а я кто такой?

6. Взаимодействие Клиент-Сервер

6.1 Простой TCP-сервер
6.2 Простой TCP-клиент
6.3 UDP-сокеты

7. Чуть более продвинутая техника

7.1 Блокирование
7.2 select() — мультиплексирование синхронного I/O
7.3 Обработка частичного send()
7.4 Сериализация — как упаковывать данные
7.5 Сын инкапсуляции данных
7.6 Бродкаст пакеты — Hello, World!

8. Общие вопросы

Введение

Эй! Программирование сокетов тебя достало? Оно слишком заковыристо, чтобы изучить его по манам? Вы хотите писать сетевые программы, но у вас нет времени, чтобы разбираться в дебрях документации, чтобы всего лишь узнать, что перед connect() нужно вызывать bind() и т.д. и т.п.?

Знаете что? Я уже проделал эту грязную работу и горю желанием поделиться со всеми полученными знаниями! Вы сюда удачно зашли! Этот документ даст среднему программисту на C достаточно знаний, чтобы начать писать сетевые программы на C.

И ещё: я наконец нашел время и дополнил гайд информацией о программировании IPv6! Наслаждайтесь!

Аудитория

Этот документ написан в качестве учебника, а не справочного материала. Наверно, лучше всего он будет восприниматься теми, кто только начинает изучать программирование сокетов и ищет точку опоры. Это не полное глобальное руководство по программированию сокетов.
Надеюсь, однако, его будет достаточно, чтобы понять суть и смысл сокетов… 🙂

Платформа и компилятор

Код, приведённый в этом документе, был скомпилирован на компьютере под управлеием GNU/Linux компилятором GNU GCC. Однако, он будет работать и на любой другой платформе, использующей gcc.

Чат для локальной сети, бесплатная версия MyChat

Естественно, это не касается windows — смотрите раздел Программистам Windows.

Официальный сайт и книги

Официальное и изначальное местонахождение этого документа — http://beej.us/guide/bgnet/. Там вы также найдете примеры кода и переводы руководства на различные языки.

Чтобы купить красиво переплетенные копии этого документа (некоторые называют их «книги»), посетите http://beej.us/guide/url/bgbuy. Я ценю заказы своих книг, поскольку они помогают поддерживать мой документо-писательский образ жизни!

Программистам Solaris и SunOS

При компиляции под Solaris/SunOS вам нужно указать компилятору дополнительные библиотеки для линковки. Для этого просто добавьте в строку компиляции: «-lnsl -lsocket -lresolv» , как-то так:

$ cc -o server server.c-lnsl -lsocket -lresolv

Если всё ещё возникают ошибки, добавьте ещё и «-lxnet». Я не знаю, что это такое, но у некоторых людей это решало проблему.

Другое узкое место — вызов setsockopt(). Прототип отличается от такогого в Linux, так что вместо

int yes=1;

используйте:

char yes=’1′;

Так как у меня нет соляриса, я не тестировал ничего из этого. Всё это мне пришло в отзывах на e-mail.

Программистам Windows

Исторически этот гайд не рассчитан на windows. Просто потому, что windows я не люблю. Но стоит быть действительно честным и признать, что у windows есть огромная база программ и пользователей, и в сущности это прекрасная ОС.

Я всё ещё надеюсь, что вы попробуете Linux, BSD или любой другой Unix.
Но людям нравится то, что им нравится, и ребята под windows имеют право на свою долю информации. Этот документ полезен и им тоже, с небольшими изменениями в коде.

Во-первых, вы можете поставить такую штуку, как Cygwin. Это коллекция инструментов Unix под Windows. Насколько я понимаю, это позволит оставить код без изменений.

Но некоторые из вас, возможно, захотят писать код под чистый windows. Это очень плохо, и вы должны немедленно поставить Unix!
Нет-нет, шучу. Нужно быть windows-терпеливым ближайшие дни…

Во-первых, вы должны игнорировать почти все хэдер-файлы, которые я использую. Всё, что вам нужно включать, это:

#include <winsock.h>

Стоп! Ещё вы должны вызывать WSAStartup() перед всем остальным кодом, относящимся к сокетам. Выглядит это примерно так:

#include <winsock.h>

{
    WSADATA wsaData;   // if this doesn’t work
    //WSAData wsaData; // then try this instead

    // MAKEWORD(1,1) for Winsock 1.1, MAKEWORD(2,0) for Winsock 2.0:

    if(WSAStartup(MAKEWORD(1,1),&wsaData)!=0){
        fprintf(stderr,"WSAStartup failed.n");
        exit(1);
    }

Также вам нужно прилинковать к проекту библиотеки: обычно это wsock32.lib или winsock32.lib или ws2_32.lib для winsock 2.0. В VC++ это может быть сделано через меню Проект, в меню Настройки… Выберите вкладку компилятор->линковка или что-то вроде того, и добавьте «wsock32.lib» (или какой-то другой похожый .lib).

Ну, я слышал, что это примерно так делается.

В конце работы с сокетами вы должны вызывать WSACleanup().

Если вы сделаете всё это, остальные примеры из этого учебника должны, по идее, работать, хоть и с некоторыми исключениями.
Во-первых, вместо close() вам нужно использовать closesocket(). select() работает только с дескриптором сокета, с дескриптором файла, как в unix, не работает.

Существует так же класс для работы с сокетами, CSocket, можете поискать его в учебниках.

Чтобы получить больше информации о Winsock, читайте Winsock FAQ.

Наконец, насколько я знаю, в windows, к сожалению, нет системы fork(), использующейся в некоторых примерах. Может быть, вы сможете прилинковать для форка библиотеку POSIX, или использовать вместо него CreateProcess(). Форк не принимает аргументов, а CreateProcess принимает миллиарды. Если вам не хочется в них разбираться, используйте CreateThread, это немного проще… К сожалению, дискуссия о многопоточности выходит за рамки этого документа.

1.6 E-Mail политика

Обычно я доступен по электронной почте, если вам нужна помощь или есть вопросы, так чир не стесняйтесь писать, но я не могу гарантировать свой ответ. Я веду довольно занятой жизни и Есть моменты, когда я просто не могу ответить на ваш вопрос. Когда так случается, я обычно просто удаляю сообщение. Ничего личного, у меня просто никогда не будет времени, чтобы дать подробный ответ, которого вы требуете.

Как правило, чем более объемный вопрос, тем менее вероятно, что я отвечу. Если вы можете сузить свой вопрос, прежде чем отправить его мне, и не забудьте включить любую соответствующую информацию (например, платформу, компилятор, сообщения об ошибках, которые вы получаете и все остальное, что, как вам кажется, может мне помочь в устранении неполадок), вы имеете гораздо больше шансов получить ответ.

Если вы не получите ответа, подумайте над ним еще некоторое время, попробуйте найти ответ, и если он по-прежнему неуловимым, то напишите мне снова с дополнительной информацией, которую Вы нашли и, надеюсь, этого мне будет достаточно для помощи вам.

Теперь, когда я загрузил вас мыслями о том, писать мне или не писать, я просто хочу, чтобы вы знали, что я в полной мере оценил все похвалы руководства, которые получил за эти годы. Знание, что книга используется для создания полезных и хороших вещей — реальная поднимает боевой дух, и радует! 🙂 Спасибо!

1.7 Зеркалирование

Зеркалирование этого материала более чем приветствуется, будь то государственные или частные сайты. Если вы опубликовали зеркало и хотите, чтобы я разместил ссылку на него на главной странице, напишите мне на beej@beej.us.

Авторские права и распространение

Руководство Beej по сетевому программированию © 2009 Brian «Beej Jorgensen» Hall.

За некоторыми исключениями исходного кода и переводов, ниже, эта работа под лицензией Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License. Чтобы просмотреть копию данной лицензии, посетите http://creativecommons.org/licenses/by-nc-nd/3.0/ или отправьте письмо в Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Одним из конкретных исключений «No Derivative Works» части лицензии является следующее: это руководство может быть свободно переведено на любой язык при условии, что перевод является точным, и руководство перепечатано в полном объеме. Такие же ограничения лицензии относятся как переводу, так и к исходному руководству. Перевод может также включать имя и контактную информацию переводчиков.

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

Педагогам свободно предлагается рекомендовать или предоставить копии этого руководства своим студентам.

Свяжитесь с beej@beej.us для получения дополнительной информации.


Войдите, чтобы оставить комментарий:

Консольный TCP-чат

Последнее обновление: 31.10.2015

Напишем более менее осмысленную программу — консольный tcp-чат.

Вначале создадим консольный проект сервера, который назовем ChatServer. В этот проект добавим два новых класса ClientObject и ServerObject. Класс ClientObject будет выглядеть так:

using System; using System.Net.Sockets; using System.Text; namespace ChatServer { public class ClientObject { protected internal string Id { get; private set; } protected internal NetworkStream Stream {get; private set;} string userName; TcpClient client; ServerObject server; // объект сервера public ClientObject(TcpClient tcpClient, ServerObject serverObject) { Id = Guid.NewGuid().ToString(); client = tcpClient; server = serverObject; serverObject.AddConnection(this); } public void Process() { try { Stream = client.GetStream(); // получаем имя пользователя string message = GetMessage(); userName = message; message = userName + » вошел в чат»; // посылаем сообщение о входе в чат всем подключенным пользователям server.BroadcastMessage(message, this.Id); Console.WriteLine(message); // в бесконечном цикле получаем сообщения от клиента while (true) { try { message = GetMessage(); message = String.Format(«{0}: {1}», userName, message); Console.WriteLine(message); server.BroadcastMessage(message, this.Id); } catch { message = String.Format(«{0}: покинул чат», userName); Console.WriteLine(message); server.BroadcastMessage(message, this.Id); break; } } } catch(Exception e) { Console.WriteLine(e.Message); } finally { // в случае выхода из цикла закрываем ресурсы server.RemoveConnection(this.Id); Close(); } } // чтение входящего сообщения и преобразование в строку private string GetMessage() { byte[] data = new byte[64]; // буфер для получаемых данных StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = Stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); } while (Stream.DataAvailable); return builder.ToString(); } // закрытие подключения protected internal void Close() { if (Stream != null) Stream.Close(); if (client != null) client.Close(); } } }

У объекта ClientObject будет устанавливаться свойство Id, которое будет уникально его идентифицировать, и свойство Stream, хранящее поток для взаимодействия с клиентом. При создании нового объекта в конструкторе будет происходить его добавление в коллекцию подключений класса ServerObject, который мы далее создадим:

serverObject.AddConnection(this);

Основные действия происходят в методе , в котором реализован простейший протокол для обмена сообщениями с клиентом. Так, в начале получаем имя подключенного пользователя, а затем в цикле получаем все остальные сообщения. Для трансляции этих сообщений всем остальным клиентам будет использоваться метод класса ServerObject.

Класс ServerObject будет выглядеть таким образом:

using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading; namespace ChatServer { public class ServerObject { static TcpListener tcpListener; // сервер для прослушивания List<ClientObject> clients = new List<ClientObject>(); // все подключения protected internal void AddConnection(ClientObject clientObject) { clients.Add(clientObject); } protected internal void RemoveConnection(string id) { // получаем по id закрытое подключение ClientObject client = clients.FirstOrDefault(c => c.Id == id); // и удаляем его из списка подключений if (client != null) clients.Remove(client); } // прослушивание входящих подключений protected internal void Listen() { try { tcpListener = new TcpListener(IPAddress.Any, 8888); tcpListener.Start(); Console.WriteLine(«Сервер запущен. Ожидание подключений…»); while (true) { TcpClient tcpClient = tcpListener.AcceptTcpClient(); ClientObject clientObject = new ClientObject(tcpClient, this); Thread clientThread = new Thread(new ThreadStart(clientObject.Process)); clientThread.Start(); } } catch(Exception ex) { Console.WriteLine(ex.Message); Disconnect(); } } // трансляция сообщения подключенным клиентам protected internal void BroadcastMessage(string message, string id) { byte[] data = Encoding.Unicode.GetBytes(message); for (int i = 0; i < clients.Count; i++) { if (clients[i].Id!= id) // если id клиента не равно id отправляющего { clients[i].Stream.Write(data, 0, data.Length); //передача данных } } } // отключение всех клиентов protected internal void Disconnect() { tcpListener.Stop(); //остановка сервера for (int i = 0; i < clients.Count; i++) { clients[i].Close(); //отключение клиента } Environment.Exit(0); //завершение процесса } } }

Все подключенные клиенты будут храниться в коллекции clients.

С помощью методов AddConnection и RemoveConnection мы можем управлять добавлением / удалением объектов из этой коллекции.

Основной метод — , в котором будет осуществляться прослушивание всех входящих подключений. При получении подключения будет запускаться новый поток, в котором будет выполняться метод Process объекта ClientObject.

Для передачи сообщений всем клиентам, кроме отправившего, предназначен метод .

Таким образом разделяются сущность подключенного клиента и сущность сервера.

Теперь надо запустить прослушивание в основном классе программы.

Топ 10: Чат для локальной сети

Для этого изменим класс Program:

using System; using System.Threading; namespace ChatServer { class Program { static ServerObject server; // сервер static Thread listenThread; // потока для прослушивания static void Main(string[] args) { try { server = new ServerObject(); listenThread = new Thread(new ThreadStart(server.Listen)); listenThread.Start(); //старт потока } catch (Exception ex) { server.Disconnect(); Console.WriteLine(ex.Message); } } } }

Здесь просто запускается новый поток, который обращается к методу объекта ServerObject.

Теперь создадим новый консольный проект для клиента, который назовем ChatClient. Изменим его стандартный класс Program следующим образом:

using System; using System.Threading; using System.Net.Sockets; using System.Text; namespace ChatClient { class Program { static string userName; private const string host = «127.0.0.1»; private const int port = 8888; static TcpClient client; static NetworkStream stream; static void Main(string[] args) { Console.Write(«Введите свое имя: «); userName = Console.ReadLine(); client = new TcpClient(); try { client.Connect(host, port); //подключение клиента stream = client.GetStream(); // получаем поток string message = userName; byte[] data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); // запускаем новый поток для получения данных Thread receiveThread = new Thread(new ThreadStart(ReceiveMessage)); receiveThread.Start(); //старт потока Console.WriteLine(«Добро пожаловать, {0}», userName); SendMessage(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Disconnect(); } } // отправка сообщений static void SendMessage() { Console.WriteLine(«Введите сообщение: «); while (true) { string message = Console.ReadLine(); byte[] data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); } } // получение сообщений static void ReceiveMessage() { while (true) { try { byte[] data = new byte[64]; // буфер для получаемых данных StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); } while (stream.DataAvailable); string message = builder.ToString(); Console.WriteLine(message);//вывод сообщения } catch { Console.WriteLine(«Подключение прервано!»); //соединение было прервано Console.ReadLine(); Disconnect(); } } } static void Disconnect() { if(stream!=null) stream.Close();//отключение потока if(client!=null) client.Close();//отключение клиента Environment.Exit(0); //завершение процесса } } }

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

Работа одного из клиентов:

Введите свое имя: Евгений Добро пожаловать, Евгений Введите сообщение: Олег вошел в чат привет мир Олег: привет чат

Работа сервера:

Сервер запущен. Ожидание подключений… Евгений вошел в чат Олег вошел в чат Евгений: привет мир Олег: привет чат

НазадСодержаниеВперед

Топ 10: Чат для локальной сети

1

MyChat

Клиент-серверный мессенджер для локальной сети. Интегрируется с Active Directory, многоуровневый список контактов, доска объявлений, система массовых оповещений, конференции, SSL шифрование трафика, передача оффлайн сообщений и файлов, гибкая система управления правами пользователей, передача файлов и папок. Встроенные Kanban доски для проектов

2

CommFort

Клиент-серверная программа для общения в корпоративной сети, которая работает на платформе ОС Windows. В состав CommFort входят модули для чата, обмена изображениями, передачи файлов, VoIP и видеосвязи. Поддерживает видеоконференции до 32 пользователей

3

Softros LAN Messenger

Простой и надежный мессенджер для локальной сети.

Чат для локальной сети

Не требует подключения к интернету. Кроме отправки мгновенных сообщений и передачи файлов, позволяет создавать виртуальные комнаты, делать массовые рассылки, сохранять историю сообщений, группировать контакты по отделам или должностям.

4

VideoMost IM

Корпоративный мобильный мессенджер в исходных кодах. Включает Корпоративный мобильный мессенджер в исходных кодах

5

Cisco Jabber

Мультимедийный корпоративный мессенджер. Поддерживает контроль онлайн статуса, чат, голосовую и видеосвязь, конференцсвязь, видеопочту, screen-sharing. Работает на PC, Mac и мобильных платформах — iPhone, iPad, Nokia, Android и BlackBerry. Использует открытый протокол Jabber (XMPP)

6

Bopup IM

Корпоративная клиент-серверная платформа для взаимодействия и общения в режиме реального времени. Интеграция с Active Directory, доступ к архиву всех переданных сообщений и файлов, доставка оффлайн данных и назначение документов сотрудникам с надежным шифрованием.

7

Vypress Chat

Простой и быстрый многопользовательский чат с контролем активности в локальной сети. Предназначен для средних и малых локальных сетей (до 300 компьютеров). Не требует выделенного сервера и может быть быстро развернут даже в сети без профессионального администратора.

8

Simple Chat

Простой и мощный кроссплатформенный клиент-серверный чат для локальной сети и Интернета, с открытым исходным кодом.

9

LAN Messenger

Бесплатные open-source кроссплатформенный мессенджер для локальной сети. Не требует сервера. Логгирование сообщений. Передача файлов.

10

G0Chat

Бесплатный кросплатформенный чат для корпоративных сетей. Передача файлов. Оффлайн сообщения.

11

RSend

Бесплатное программное обеспечение для обмена мгновенными сообщения в сетях Microsoft Windows. Высокая скорость доставки сообщений большому количеству получателей (1000+)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *