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

Ваш аккаунт

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

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

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

SOAP Server

7.5K
14 октября 2011 года
diprom
37 / / 15.10.2010
Здравствуйте.
Скажите как реализовать пример простого SOAP servera по технологии http без парсирования сообщения ,
чтобы видеть, что подсоединился клиент и отослать ему любое сообщение request, как на примере WinSock Server:
// Пример простого TCP сервера
#include <stdio.h>
#include <winsock2.h> // Wincosk2.h должен быть раньше windows!
#include <windows.h>
#define MY_PORT 60000 // Порт, который слушает сервер
// макрос для печати количества активных пользователей
#define PRINTNUSERS if (nclients) printf("%d user online\n",nclients);else printf("No User on line\n");
// прототип функции, обслуживающий подключившихся пользователей
DWORD WINAPI SexToClient(LPVOID client_socket);
// глобальная переменная – количество активных пользователей
int nclients = 0;
int main(int argc, char* argv[])
{
char buff[1024]; // Буфер для различных нужд
printf("TCP SERVER DEMO\n");
// Шаг 1 Инициализация Библиотеки Сокетов
// Т. к. возвращенная функцией информация не используется
// ей передается указатель на рабочий буфер, преобразуемый к указателю
// на структуру WSADATA.
// Такой прием позволяет сэкономить одну переменную, однако, буфер
// должен быть не менее полкилобайта размером (структура WSADATA
// занимает 400 байт)
// функции accept необходимо передать размер структуры
int client_addr_size=sizeof(client_addr);
// цикл извлечения запросов на подключение из очереди
while((client_socket=accept(mysocket, (sockaddr *) &client_addr, &client_addr_size)))
{
nclients++; // увеличиваем счетчик подключившихся клиентов
// пытаемся получить имя хоста
HOSTENT *hst;
hst=gethostbyaddr((char *) &client_addr.sin_addr.s_addr,4,AF_INET);
// вывод сведений о клиенте
printf("+%s [%s] new connect!\n",
(hst)?hst>h_name:"",inet_ntoa(client_addr.sin_addr));
PRINTNUSERS
// Вызов нового потока для обслужвания клиента
// Да, для этого рекомендуется использовать _beginthreadex
// но, поскольку никаких вызов функций стандартной Си библиотеки
// поток не делает, можно обойтись и CreateThread
DWORD thID;
CreateThread(NULL,NULL,SexToClient,&client_socket,NULL,&thID);
}
return 0;
}
// Эта функция создается в отдельном потоке
// и обсуживает очередного подключившегося клиента независимо от остальных
DWORD WINAPI SexToClient(LPVOID client_socket)
{
SOCKET my_sock;
my_sock=((SOCKET *) client_socket)[0];
char buff[20*1024];
#define sHELLO "Hello, Sailor\r\n"
// отправляем клиенту приветствие
send(my_sock,sHELLO,sizeof(sHELLO),0);
// цикл эхосервера: прием строки от клиента и возвращение ее клиенту
while( (int bytes_recv=recv(my_sock,&buff[0],sizeof(buff),0)) &&
bytes_recv !=SOCKET_ERROR)
send(my_sock,&buff[0],bytes_recv,0);
// если мы здесь, то произошел выход из цикла по причине
// возращения функцией recv ошибки – соединение с клиентом разорвано
nclients; // уменьшаем счетчик активных клиентов
printf("disconnect\n"); PRINTNUSERS
// закрываем сокет
closesocket(my_sock);
return 0;
}
11
14 октября 2011 года
oxotnik333
2.9K / / 03.08.2007
sHELLO замени на XML ответ и высылай
7.5K
14 октября 2011 года
diprom
37 / / 15.10.2010
А как же быть c HTTPRequest?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог