Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.86] |
|
Сообщ.
#1
,
|
|
|
Люди!!! Стоя на коленях прошу вас выслать мне пример TCP сервера который в момент общения с клиентом может делать хоть что-нибудь еще, а не зацикливаться... А-А-А-А!!!
|
Сообщ.
#2
,
|
|
|
ты очень вовремя... 10 минут назад я закончил последние тесты моего TCP клиент-сервера....
напиши куда выслать... |
Сообщ.
#3
,
|
|
|
И мне тоже скинь плиз: pigmey@di.net.ua
|
Сообщ.
#4
,
|
|
|
[\move] - вообще-то слэш нужно ставить в другую сторону
А что тебе не нравится? у меня на винте почти 1 гектар разных сырцов - ведь может пригодиться! погляжу сырцы Muranа, может интересное что-нить почерну, а нет - так Del на что? |
Сообщ.
#5
,
|
|
|
[move] - вообще-то слэш нужно ставить в другую сторону [/move]
Я уже понял ;D Цитата Alfa, 26.01.03, 12:50:36 А что тебе не нравится? у меня на винте почти 1 гектар разных сырцов - ведь может пригодиться! погляжу сырцы Muranа, может интересное что-нить почерну, а нет - так Del на что? Просто забавно... ;D А сырцов и у меня много! |
Сообщ.
#6
,
|
|
|
Если оно более менее без MFC сокетов, то и мне плз:)
Muran тебе уже пора себе на страничку выкладывать и линк давать:) |
Сообщ.
#7
,
|
|
|
Во я какой прикольный вопрос задал!!! :)
Только чето Muran с массовой отправкой писем не торопится :( |
Сообщ.
#8
,
|
|
|
Цитата Ламка, 26.01.03, 16:29:15 Во я какой прикольный вопрос задал!!! Только чето Muran с массовой отправкой писем не торопится А он посмотрел на это все и подумал ( на... нужно )! ;D |
Сообщ.
#9
,
|
|
|
<br>::WaitForSingleObject(hMuran,INFINITE);<br> Блин, народ, сорри, не ожидал, что тема супер порпулярна... у меня накрылась почта... но главная проблема в том, что я все переделал... сеёчас в очередной раз прогнал все тесты... вроде опять работает... через пару минут все выложу на www.muransoft.narod.ru/tcp_debug.rar Rar третьей версии. Это полнейший дебаг... всякие сообщений вываливаются.. иногда падает... Сегодня скорее всего доделаю... Сделано вообще без MFC и предполагается, что я это все засуну в dll и будую юзать COM объект от туда... во как. |
Сообщ.
#10
,
|
|
|
усе.. выложил последнюю рабочую версию.. конечно многое сделано по русски,
но времени особо не было.. к тому же это дебаг... все заинтересованные могут спрашивать что и как.. т.к. комментариев нету... плка не сделал... |
Сообщ.
#11
,
|
|
|
Чудесненько! :D Ща буду telnetom тестить...
|
Сообщ.
#12
,
|
|
|
НАРОД!!! ВСЕМ-ВСЕМ-ВСЕМ!!!
Я надыбал статью : "Самоучитель игры на WINSOCK" Крис Касперски kpnc@aport.ru Я специально для вас всех привел ее в божеский вид: #include <stdio.h> <br>#include <winsock2.h> // Wincosk2.h должен быть раньше windows! <br>#include <windows.h> <br>#define MY_PORT 666 // Порт, который слушает сервер <br><br>// макрос для печати количества активных пользователей <br>#define PRINTNUSERS if (nclients) printf("\%d user on-line\n",nclients);else printf("No User on line\n"); <br><br>// прототип функции, обслуживающий подключившихся пользователей <br>DWORD WINAPI SexToClient(LPVOID client_socket); <br><br>// глобальная переменная – количество активных пользователей <br>int nclients = 0; <br>int main(int argc, char* argv[]) <br>{ <br>char buff[1024]; // Буфер для различных нужд <br>printf("TCP SERVER DEMO\n"); <br>// Шаг 1 - Инициализация Библиотеки Сокетов <br>// Т.к. возвращенная функцией информация не используется <br>// ей передается указатель на рабочий буфер, преобразуемый к указателю <br>// на структуру WSADATA. <br>// Такой прием позволяет сэкономить одну переменную, однако, буфер <br>// должен быть не менее полкилобайта размером (структура WSADATA <br>// занимает 400 байт) <br>if (WSAStartup(0x0202,(WSADATA *) &buff[0])) <br>{ <br>// Ошибка! <br>printf("Error WSAStartup \%d\n",WSAGetLastError()); <br>return -1; <br>} <br><br>// Шаг 2 - создание сокета <br>SOCKET mysocket; <br>// AF_INET - сокет Интернета <br>// SOCK_STREAM - потоковый сокет (с установкой соединения) <br>// 0 - по умолчанию выбирается TCP протокол <br>if ((mysocket=socket(AF_INET,SOCK_STREAM,0))<0) <br>{ <br>// Ошибка! <br>printf("Error socket \%d\n",WSAGetLastError()); <br>WSACleanup(); // Деиницилизация библиотеки Winsock <br>return -1; <br>} <br><br>// Шаг 3 связывание сокета с локальным адресом <br>sockaddr_in local_addr; <br>local_addr.sin_family=AF_INET; <br>local_addr.sin_port=htons(MY_PORT); // не забываем о сетевом порядке!!! <br>local_addr.sin_addr.s_addr=0; // сервер принимает подключения <br>// на все свои IP-адреса <br><br>// вызываем bind для связывания <br>if (bind(mysocket,(sockaddr *) &local_addr, sizeof(local_addr))) <br>{ <br>// Ошибка <br>printf("Error bind \%d\n",WSAGetLastError()); <br>closesocket(mysocket); // закрываем сокет! <br>WSACleanup(); <br>return -1; <br>} <br><br>// Шаг 4 ожидание подключений <br>// размер очереди – 0x100 <br>if (listen(mysocket, 0x100)) <br>{ <br>// Ошибка <br>printf("Error listen \%d\n",WSAGetLastError()); <br>closesocket(mysocket); <br>WSACleanup(); <br>return -1; <br>} <br><br>printf("Waiting for connections... #8230;\n"); <br><br>// Шаг 5 извлекаем сообщение из очереди <br>SOCKET client_socket; // сокет для клиента <br>sockaddr_in client_addr; // адрес клиента (заполняется системой) <br><br>// функции accept необходимо передать размер структуры <br>int client_addr_size=sizeof(client_addr); <br><br>// цикл извлечения запросов на подключение из очереди <br>while((client_socket=accept(mysocket, (sockaddr *) &client_addr, &client_addr_size))) <br>{ <br>nclients++; // увеличиваем счетчик подключившихся клиентов <br>// пытаемся получить имя хоста <br>HOSTENT *hst; <br>hst=gethostbyaddr((char *) &client_addr.sin_addr.s_addr,4,AF_INET); <br><br>// вывод сведений о клиенте <br>printf("+\%s [\%s] new connect!\n",(hst)?hst->h_name:"",inet_ntoa(client_addr.sin_addr)); <br>PRINTNUSERS <br>// Вызов нового потока для обслужвания клиента <br>// Да, для этого рекомендуется использовать _beginthreadex <br>// но, поскольку никаких вызов функций стандартной Си библиотеки <br>// поток не делает, можно обойтись и CreateThread <br>DWORD thID; <br>CreateThread(NULL,NULL,SexToClient,&client_socket,NULL,&thID); <br>} <br>return 0; <br>} <br><br><br>// Эта функция создается в отдельном потоке <br>// и обсуживает очередного подключившегося клиента независимо от остальных <br>DWORD WINAPI SexToClient(LPVOID client_socket) <br>{ <br>SOCKET my_sock; <br>my_sock=((SOCKET *) client_socket)[0]; <br>char buff[20*1024]; <br>#define sHELLO "Hello, Sailor\r\n" <br><br>// отправляем клиенту приветствие <br>send(my_sock,sHELLO,sizeof(sHELLO),0); <br><br>// цикл эхо-сервера: прием строки от клиента и возвращение ее клиенту <br>while(int bytes_recv=recv(my_sock,&buff[0],sizeof(buff),0) && bytes_recv !=SOCKET_ERROR) <br>send(my_sock,&buff[0],bytes_recv,0); <br><br>// если мы здесь, то произошел выход из цикла по причине <br>// возращения функцией recv ошибки – соединение с клиентом разорвано <br>nclients--; // уменьшаем счетчик активных клиентов <br>printf("-disconnect\n"); PRINTNUSERS <br><br>// закрываем сокет <br>closesocket(my_sock); <br>return 0; <br>} <br><br><br><br>====== извините, но клиент приведёте в божеский вид сами ======<br><br><br>// Пример простого TCP клиента <br>#include <stdio.h> <br>#include <string.h> <br>#include <winsock2.h> <br>#include <windows.h> <br><br>#define PORT 666 <br>#define SERVERADDR "127.0.0.1" <br><br>int main(int argc, char* argv[]) <br>{ <br>char buff[1024]; <br>printf("TCP DEMO CLIENT\n"); <br><br>// Шаг 1 - инициализация библиотеки Winsock <br>if (WSAStartup(0x202,(WSADATA *)&buff[0])) <br>{ <br>printf("WSAStart error \%d\n",WSAGetLastError()); <br>return -1; <br>} <br><br>// Шаг 2 - создание сокета <br>SOCKET my_sock; <br>my_sock=socket(AF_INET,SOCK_STREAM,0); <br>if (my_sock<0) <br>{ <br>printf("Socket() error \%d\n",WSAGetLastError()); <br>return -1; <br>} <br><br>// Шаг 3 - установка соединения <br><br>// заполнение структуры sockaddr_in – указание адреса и порта сервера <br>sockaddr_in dest_addr; <br>dest_addr.sin_family=AF_INET; <br>dest_addr.sin_port=htons(PORT); <br>HOSTENT *hst; <br><br>// преобразование IP адреса из символьного в сетевой формат <br>if (inet_addr(SERVERADDR)!=INADDR_NONE) <br>dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR); <br>else <br>// попытка получить IP адрес по доменному имени сервера <br>if (hst=gethostbyname(SERVERADDR)) <br>// hst->h_addr_list содержит не массив адресов, а массив указателей на адреса <br>((unsigned long *)&dest_addr.sin_addr)[0]=((unsigned long <br>**)hst->h_addr_list)[0][0]; <br>else <br>{ <br>printf("Invalid address \%s\n",SERVERADDR); <br>closesocket(my_sock); <br>WSACleanup(); <br>return -1; <br>} <br><br>// адрес сервера получен – пытаемся установить соединение <br>if (connect(my_sock,(sockaddr *)&dest_addr,sizeof(dest_addr))) <br>{ <br>printf("Connect error \%d\n",WSAGetLastError()); <br>return -1; <br>} <br><br>printf("Соединение с \%s успешно установлено\n\ Type quit for quit\n\n",SERVERADDR); <br><br>// Шаг 4 - чтение и передача сообщений <br>int nsize; <br>while((nsize=recv(my_sock,&buff[0],sizeof(buff)-1,0))!=SOCKET_ERROR) <br>{ <br>// ставим завершающий ноль в конце строки <br>buff[nsize]=0; <br><br>// выводим на экран <br>printf("S=>C:\%s",buff); <br><br>// читаем пользовательский ввод с клавиатуры <br>printf("S<=C:"); fgets(&buff[0],sizeof(buff)-1,stdin); <br><br>// проверка на "quit" <br>if (!strcmp(&buff[0],"quit\n")) <br>{ <br>// Корректный выход <br>printf("Exit..."); <br>closesocket(my_sock); <br>WSACleanup(); <br>return 0; <br>} <br><br>// передаем строку клиента серверу <br>send(my_sock,&buff[0],nsize,0); <br>} <br><br>printf("Recv error \%d\n",WSAGetLastError()); <br>closesocket(my_sock); <br>WSACleanup(); <br>return -1; <br>} ПОДКЛЮЧАЕМ ws2_32.lib И ПРОГРАММЫ ГОТОВЫ К РАБОТЕ PS 2 Moderator: Плз не удаляй это сообщение, оно может очень многим понадобиться... Не боися, модеры плохого почти не делают ;D (added by SUnteXx) |
Сообщ.
#13
,
|
|
|
Цитата ну он то ладно!!! Я что-то недопонял, это ты к чему ? : |
Сообщ.
#14
,
|
|
|
Цитата Pigmey, 27.01.03, 01:37:35 Я что-то недопонял, это ты к чему ? : ;D ;D ;D Я сказал Ну он то ладно для нижнего, а не для верхнего...! ;) |
Сообщ.
#15
,
|
|
|
;D
|