|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.07.2011, 01:58 | #11 | |||
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,336
|
2Сыроежка
Цитата:
Цитата:
Цитата:
сам же где то распинался, объявили входящий указатель как указатель на const, значит данные нельзя модифицировать. тут точно так же. не передали размер, значит считаем, что это не массив. другое дело, если ты пишешь быдлокод, который никто кроме тебя не читает, пиши как хочешь, никто ничего не запрещает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 22.07.2011 в 02:02. |
|||
22.07.2011, 01:58 | #12 |
Пользователь
Регистрация: 03.12.2009
Сообщений: 25
|
Массив у меня фиксированной длины - 64.
Но, парни, давайте, пожалуйста, вернемся к рассматриваемой проблеме: ответ на 3ий вопрос из первого сообщения. Я так понимаю, что ситуация, происходящая в программе, ясна. Если нет - пишите, я поясню. |
22.07.2011, 12:08 | #13 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> ответ на 3ий вопрос
я ж уже написал, повторюсь: Цитата:
ОК, я бы делал так: — создаём глобальную структуру, в которую помещаются данные для отсылки всем клиентам. — когда нужно что-то передать, заполняем данные в этой структуре, и все потоки оповещаются (через Event, который просматривается в цикле потока), что есть данные для отсылки. — после отсылки каждый поток выставляет свой Event, признак того, что глобальные данные этим потоком обработаны. — отдельный поток следит за этими последними Envent-ами, и когда все выставленны, считется, что данные отправлены всем, и их можно удалять (подготавливать новые для отправки). Слишком сложно? Тогда индусский подход: — создаём отдельный поток, который по массиву сокетов в цикле отправляет всем сообщение. Если сокеты не ассинхронные, то горячий привет из Индии. Но и с ассинхронными сокетами может быть беда, если массив клиентстких сокетов часто обновляется (люди часто входят-выходят из чата).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
|
22.07.2011, 16:58 | #14 |
Пользователь
Регистрация: 03.12.2009
Сообщений: 25
|
Вопрос состоит в том, как сделать отсылку сообщения сразу всем потокам?
|
28.12.2012, 06:11 | #15 |
Регистрация: 02.12.2011
Сообщений: 3
|
на щет массива рассылки
Код HTML:
#include <iostream> #include <windows.h> #include <winsock2.h> #include<stdio.h> #include <string> using namespace std; SOCKET massiv_socket[1000]; int num_massiv_socket = 0; DWORD WINAPI SexToClient(LPVOID client_socket) { SOCKET my_sock; my_sock=((SOCKET*) client_socket)[0]; char buff[20*1024]; int bytes_recv; int Numer = num_massiv_socket - 1; while( (bytes_recv = recv(my_sock,&buff[0],sizeof(buff),0)) && bytes_recv !=SOCKET_ERROR) { for (int i = 0; i < num_massiv_socket; i ++) { if (massiv_socket[i] != my_sock) send(massiv_socket[i], &buff[0] , bytes_recv,0); } Sleep(1); } num_massiv_socket--; closesocket(my_sock); return 0; } int main() { // unsigned long flag = true; //char buff[256]; WSAData ws; WSAStartup(0x0202 ,&ws ); SOCKET mysocket; mysocket = socket(AF_INET , SOCK_STREAM , 0); sockaddr_in local_addr; local_addr.sin_family = AF_INET; local_addr.sin_port = htons(666); local_addr.sin_addr.S_un.S_addr = 0; //int i = 1; //setsockopt(mysocket,SOL_SOCKET,SO_REUSEADDR,(char *)&i,sizeof (i)); if(bind(mysocket , (sockaddr*)&local_addr , sizeof(local_addr))) { closesocket(mysocket); WSACleanup(); } listen(mysocket , 0x100); SOCKET client_socket; sockaddr_in client_addr; int client_addr_size=sizeof(client_addr); while((client_socket=accept(mysocket, (sockaddr *) &client_addr, &client_addr_size))) { massiv_socket[num_massiv_socket] = client_socket; num_massiv_socket++; DWORD thID; CreateThread(NULL,0,SexToClient, &client_socket,0,&thID); // _beginthread(thread_proc , 0 , &client_socket); } closesocket(mysocket); WSACleanup(); return 0; } |
28.12.2012, 06:15 | #16 |
Регистрация: 02.12.2011
Сообщений: 3
|
ето метод катит только для чата
если игра то больше двоих клиентов будут путать систему потому что два три потока будут давать данные в тот же клиент и биты перепутаются |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чат через winsock | Jasper92 | Помощь студентам | 0 | 23.11.2010 14:48 |
Многопоточный сервер | FAiver | Работа с сетью в Delphi | 18 | 31.03.2008 08:51 |
многопоточный сервер | мандарин | Работа с сетью в Delphi | 6 | 24.04.2007 07:22 |
Многопоточный Ping | Квэнди | Работа с сетью в Delphi | 0 | 18.12.2006 15:01 |