Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2013, 22:00   #1
lavrik0000
 
Регистрация: 03.05.2013
Сообщений: 4
По умолчанию Как считать данные от сервера UDP

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

Пытаюсь на писать не большой скриптик который должен опрашивать сервера (Goldsource, Source Server). На php написал без труда правда давненько и что та уже подзабыл но не суть.
Нашел в инете инфу про сокеты на unix. Сделал по ману клиент-сервер все отработало прекрасно, сел переделывать скрипт под свои нужды. Скрипт вроде нормально отправляет данные (UDP не проконтролировать) но вот как прочитать данные полученные в ответ до меня не допирает.
Код:
#include <cstdlib>
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

using namespace std;

int main()
{
	string message[] = "\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00";
	
	char buf[sizeof(message)];
	
	int sock;
	//Обьевбляем структуру(класс)
	struct sockaddr_in addr;
	struct in_addr iaddr;
	
	//Создаем сокет
	sock = socket(AF_INET, SOCK_DGRAM, 0);
	
	//проверяем сокет 0=TRUE / -1=False
	if(sock < 0)
	{
		perror("socket");
		exit(1);
	}
	
	addr.sin_family = AF_INET;
	addr.sin_port = htons(27015);
	addr.sin_addr.s_addr = inet_addr("77.220.182.182");
	
	int result;
	result = connect(sock, (struct sockaddr *)&addr, sizeof(addr));
	
	if(result < 0)
	{
		perror("connect");
		exit(2);
	}
	else
	{
		cout << "Работает" << endl;
	}
	system("pause");
	
	cout << send(sock, message, sizeof(message), 0) << endl;
	cout << recv(sock, buf, sizeof(message), 0) << endl; 
	
	return 0;
}
если изменить порт на котором нету сервера то функция recv возрощает -1, а если порт рабочей то прога тупа бездействует и в консоле не чего не происходит. Подскажите как получить данные плиз. В C++ знаю только базовые вещи.
Заранее премного благодарен.
lavrik0000 вне форума Ответить с цитированием
Старый 24.06.2013, 22:26   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

А вы уверены, что сервер шлет ответ?
Похоже, что recv() просто ждет ответа.
Насчет отслеживания UDP, рекомендую WireShark - по крайней мере сможете увидеть а) уходит ли ваш пакет и б) приходит ли пакет в ответ.
waleri вне форума Ответить с цитированием
Старый 24.06.2013, 22:36   #3
lavrik0000
 
Регистрация: 03.05.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А вы уверены, что сервер шлет ответ?
Похоже, что recv() просто ждет ответа.
Насчет отслеживания UDP, рекомендую WireShark - по крайней мере сможете увидеть а) уходит ли ваш пакет и б) приходит ли пакет в ответ.
а для консольный линухи не чего не подскажеш для мониторнга?
lavrik0000 вне форума Ответить с цитированием
Старый 25.06.2013, 01:04   #4
lavrik0000
 
Регистрация: 03.05.2013
Сообщений: 4
По умолчанию

все сделал просто я не внимательный персонаж, большое спасибо за помощь waleri))
lavrik0000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как считать данные с файла? doctorvra4 Паскаль, Turbo Pascal, PascalABC.NET 1 22.11.2012 20:29
Как считать данные из PropertyGrid? IIISpikerIII C# (си шарп) 7 20.06.2012 16:54
Как считать данные с БД в WebBrowser? tsergey Общие вопросы Delphi 14 13.04.2009 03:56
как можно читать бинарные данные, через UDP? b_gafurov Работа с сетью в Delphi 0 06.04.2009 15:15
Как считать данные из Edit? Svop Компоненты Delphi 11 20.11.2006 16:45