Для чата ИМХО лучше подходит UDP протокол, тогда и с коннектом возится не будешь. А вот как создать элементарный чат: Использование Winsock контролаЭтот текст является вольным переводом из MSDN и демонстрирует возможности обмена данными по сети при помощи компонента Winsock. Кое-что дополнено и исправлена одна ошибка из сэмпла MSDN из-за которой передача шла только в одну сторону. Использование компонента WinsockКомпонент WinSock позволяет соединиться с удаленной машиной и обменяться с ней данными, используя UDP (User Datagram Protocol) или TCP (Transmission Control Protocol). Оба протокола могут быть использованы при создании клиент-серверных приложений. Также, как и Timer control, WinSock control является невидимым во время выполнения программы. Как им пользоваться?- cоздать приложение-клиент, которое будет собирать информацию перед отсылкой ее на центральный сервер; - cоздать приложение-сервер, которое будет выполнять роль сборщика и хранителя информации от различных клиентских приложений; - создать "chat"-приложение. Выбор протокола.Когда планируется использование а WinSock, необходимо решить какой протокол будет использоваться - TCP или UDP. Основное отличие между ними заключается в способе организации связи: Соединение основанное на TCP протоколе, похоже на телефонное - пользователь сначала должен установить соединение, прежде чем что-либо передавать. Соединение основанное на UDP протоколе, похоже на передачу голосом, сообщение передается от одного компьютера к другому, но не ясно, слышат ли они друг друга. Вдобавок, максимальный размер предаваемых данных устанавливается сетью. Возможности приложения которое Вы создаете будет зависеть от протокола, который Вы изберете. Вот несколько вопросов которые могут помочь Вам выбрать подходящий протокол: Будет ли приложение требовать уведомления от сервера или клиента, когда данные передаются или получаются? Если будет, то TCP протокол требует установленного соединения между передатчиком и приемником данных. Будут ли передаваемые данные достаточно тяжелыми (например изображения или звуковые файлы)? Если соединение было установлено, TCP протокол будет его поддерживать и гарантируется целостность передаваемых данных. Такое соединение, из-за потребности в большем количестве вычислительных ресурсов, может сделать его более медленным. Будут ли данные передаваться порциями или за одну сессию? Например, если Вы создаете приложение, которое сообщает каким-то компьютерам, о том, что какие-то задачи уже выполнены, то UDP протокол более подходящий. UDP протокол также блучше подходит для передачи небольшого количества данных. Установка протокола.Чтобы установить протокол, который будет использовать ваше приложение Вы должны в дизайн-тайме в окне свойств выбрать свойство Protocol и установить его sckTCPProtocol или sckUDPProtocol. Это можно также сделать программно: Winsock1.Protocol = sckTCPProtocol Определение имени компьютера.Чтобы установить связь с удаленным компьютером, Вы должны знать либо его IP-адресс, либо его имя. Основы TCP соединения.Когда создается приложение, которое использует TCP протокол первое, что Вы должны решить, это чем будет ваше приложение клиентом или сервером. Если Вы создаете приложение-сервер, значит ваше приложение будет слушать указанный порт. Когда приложение-клиент подаст запрос на соедиение, приложение-сервер может принять запрос и таким образом установить соедиенеие. Если соединение установлено, приложение-клиент и приложение сервер могут свободно обмениваться данными. Следующие шаги позволят Вам создать элементарное приложение-сервер: Для создания TCP сервера- Создайте новый Standard EXE проект.
- Замените имя формы по умолчанию на frmServer.
- В свойстве формы caption наберите "TCP Server"
- В меню Project\Components добавьте Microsoft Winsock Conrol 6.0
- Перетащите иконку компонента Winsock с панели инструментов и разместите ее на форме; измените имя компонента на tcpServer.
Добавьте на форму два Текстбокс элемента. В свойстве Name первого текстового поля наберите txtSendData, а второго txtOutput. Добавьте в форму следующий код: Private Sub Form_Load() 'Задать номер порта по которому будет осуществляться 'обмен данными, присвоив значение свойству LocalPort 'Вызвать метод Listen. tcpServer.LocalPort = 1001 tcpServer.Listen frmClient.Show 'Показать форму клиента End Sub Private Sub tcpServer_ConnectionRequest _ (ByVal requestID As Long) ' Проверяется свойство State, было ли завершено ' предыдущее соединение. Если не завершено, ' то перед установлением нового соединения, ' старое закрывается принудительно. If tcpServer.State <> sckClosed Then _ tcpServer.Close ' Принятие запроса Accept с параметром requestID ' на установление соедиения. tcpServer.Accept requestID End Sub Private Sub txtSendData_Change() ' Текстовое поле txtSendData ' содержит данные для передачи. Все символы, ' которые будут вводиться в это текстовое поле, будут единой ' строкой посылаться приложению-клиенту, используя метод SendData. tcpServer.SendData txtSendData.Text End Sub Private Sub tcpServer_DataArrival _ (ByVal bytesTotal As Long) ' Декларируется переменная-буфер для получаемых данных. ' Вызывается метод GetData и свойству Text ' текстового поля txtOutput, присваивается значение переменной- ' буфера. Dim strData As String tcpServer.GetData strData txtOutput.Text = strData End Sub Описанные выше действия, выполненные Вами, приведут к созданию простого приложения-сервера. Но для того чтобы полностью выполнить задачу, необходимо создать еще и приложение-клиент. Для создания TCP приложения-клиентаДобавьте новую форму в проект и назовите ее frmClient. И змените свойство формы caption на "TCP Client". Перетащите и разместите компонент Winsock на форму и измените его свойство name на "tcpClient". - Добавьте два Текстбокс-контрола на форму frmClient.
- Имя первого установите txtSend, а второго txtOutput.
- Перетащите на форму CommandButton и установите его свойство name в "cmdConnect".
- Измените свойство caption этой кнопки на "Connect".
Добавьте следующий код в форму.Важно!!! Будьте внимательны при установке свойства RemoteHost. Оно должно соответствовать либо IP-адресу вашего компьютера, либо его "Дружественному имени" (см. Пуск\Настройка\Панель управления\Сеть) выберите вкладку "Идентификация". Текст из поля "Имя компьютера" и будет так называемым дружественным именем, которым можно заменять IP-адрес. Сам же IP-адрес, можно посмотреть, если выбрать закл
|