Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите написать ЧАТ

305
26 января 2004 года
Kashuk
385 / / 21.02.2003
Хочу написать простенький чат.
Как можно реализовать передачу сообщений по сети между машинами. Машин в сети около 10.

Спсибо!
4
26 января 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by Kashuk
Хочу написать простенький чат.
Как можно реализовать передачу сообщений по сети между машинами. Машин в сети около 10.

Спсибо!



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

305
26 января 2004 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by mike


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



А что именно, ты хоть намекни название нужных компонентов, а я уже что то нарою...

4
26 января 2004 года
mike
3.7K / / 01.10.2002
TServerSocket
TClientSocket
6.2K
26 января 2004 года
eXtern
6 / / 26.01.2004
да легко!
Я когда учился работать с winsock'ом этих чатов понаписал... =)))
Только вот единственный минус это протокол UDP, но в принципе при достаточно небольших сообщениях инфа теряться не будет (тем более в сети).
Я когда прогу писал, которая пересылала файлы с моего компа на др. ни разу не встретил проблему с потерей данных, а протокол был UDP!!!
6.2K
26 января 2004 года
eXtern
6 / / 26.01.2004
и ещё один минус =) пишу на Си билдер не юзаю!
И вообще c++ - sux c - foreva =)))
6.2K
26 января 2004 года
eXtern
6 / / 26.01.2004
#include <stdio.h>
#include <winsock2.h>
#define IP "127.0.0.1" /* ипышник сервера */
#define PORT 9999 /* порт сервера */
#define MAX 255 /* максимальный размер сообщения */

void main(void)
{
int client_size, m_size;
char buff[MAX];
WSADATA winsock;
SOCKET sock;
struct sockaddr_in local_addr, client_addr;
if (WSAStartup(0x202, &winsock))
{
printf("WSAStartup error: %d\n",
WSAGetLastError());
return;
}
sock=socket(AF_INET, SOCK_DGRAM, 0);
if (sock==INVALID_SOCKET)
{
printf("error: %d",WSAGetLastError());
WSACleanup();
return;
}
local_addr.sin_family=AF_INET;
local_addr.sin_addr.s_addr=INADDR_ANY;
local_addr.sin_port=htons(PORT);
if (bind(sock, (struct sockaddr *) &local_addr,
sizeof(local_addr)))
{
printf("error: %d",WSAGetLastError());
closesocket(sock);
WSACleanup();
return;
}
client_size = sizeof(client_addr);
while(1)
{
m_size=recvfrom(sock, buff, sizeof(buff)-1, 0,
(struct sockaddr *) &client_addr, &client_size);
if (m_size==SOCKET_ERROR)
printf("error: %d",
WSAGetLastError());
buff[m_size]=0;
printf("message from client: %s\n", buff);
sendto(sock, buff, m_size, 0,
(struct sockaddr *) &client_addr,
sizeof(client_addr));
}
}
/* это сервер */
6.2K
26 января 2004 года
eXtern
6 / / 26.01.2004
#include <stdio.h>
#include <winsock.h>
#include <string.h>
#define IP "127.0.0.1" /* ипышник сервака */
#define PORT 9999 /* его порт */
#define MAX 255 /* максимальный размер сообщения*/

void main(void)
{
int client_size, m_size;
char buff[MAX];
WSADATA winsock;
SOCKET sock;
struct sockaddr_in local_addr, client_addr;
if (WSAStartup(0x202, &winsock))
{
printf("WSAStartup error: %d\n",
WSAGetLastError());
return;
}
sock=socket(AF_INET, SOCK_DGRAM, 0);
if (sock==INVALID_SOCKET)
{
printf("error: %d",WSAGetLastError());
WSACleanup();
return;
}
local_addr.sin_family=AF_INET;
local_addr.sin_addr.s_addr=inet_addr(IP);
local_addr.sin_port=htons(PORT);
client_size = sizeof(client_addr);
while(1)
{

printf("your message: ");
scanf("%s", buff);
sendto(sock, buff, strlen(buff), 0,
(struct sockaddr *) &local_addr, sizeof(local_addr));
m_size=recvfrom(sock, buff, sizeof(buff)-1, 0,
(struct sockaddr *) &client_addr, &client_size);
if (m_size==SOCKET_ERROR)
printf("error: %d",
WSAGetLastError());
buff[m_size]=0; /* обрати внимание последний символ строки NULL */
printf("message from server: %s\n", buff);
}
}
/* это клиент!
можешь вставить код в билдере! работать будет!
свяжешь buff с memo (для вывода сообщений), а
printf - сотри.
со сканфом также (замени на Edit->Text, например)
Дальше сделай массив структур client_addr
и с помощью цикла рассылай всем!
ну вроде всё! */
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог