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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2018, 16:14   #1
Geks74
Новичок
Джуниор
 
Регистрация: 12.04.2018
Сообщений: 2
По умолчанию Передача данных в HEX через UDP сокет

Код:
#include "SServer.h"
#include "includes.h"

SServer::SServer(){
}

SServer::~SServer(){
}
void SServer::startServer(){

	const char buff[153] = "\x5A\xA5\xAA\x55\x5A\xA5\xAA\x55\x00\x00\x89\xD3\x81\x5F\x19\x94";
	if (WSAStartup(MAKEWORD(2, 2), &wData) == 0)
	{
		printf("WSA Startup succes\n");
	}
	SOCKADDR_IN addr;
	addr.sin_addr.S_un.S_addr = INADDR_ANY;
	addr.sin_port = htons(port);
	addr.sin_family = AF_INET;
	this_s = socket(AF_INET, SOCK_DGRAM, NULL);
	if (this_s == SOCKET_ERROR) {
		printf("Socket not created\n");
	}

	if (bind(this_s, (sockaddr *)&addr,
		sizeof(addr)))
	{
		printf("bind error: %d\n", WSAGetLastError());
	}
	
		printf("Port socketa %u\n", ntohs(addr.sin_port));
		
		printf("Server IP: %s\n", inet_ntoa((in_addr)addr.sin_addr));

		cout << buff;

		HOSTENT *hst;
		sockaddr_in dest_addr;
		dest_addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.50");
		dest_addr.sin_family = AF_INET;
		dest_addr.sin_port = htons(80);

		printf("\nPort hosta %u\n", ntohs(dest_addr.sin_port));
		printf("Host IP: %s\n", inet_ntoa((in_addr)dest_addr.sin_addr));

		sendto(this_s, &buff[0], strlen(&buff[0]), 0,
			(sockaddr *)&dest_addr, sizeof(dest_addr));

}
int main(){
	SServer server;
	server.port = 3410;//порт это ushort - так что cin.get() и т.п. функции тут работаю некорректно. Лучше задать фвручную
	server.startServer();
	Sleep (10000);

	return 0;
}
Добрый день. Проблема в следующем. После отправки заданного массива, передача прерывается на \х00 и все что за ней не передается, как исправить? Подскажите пожалуйста.
Geks74 вне форума Ответить с цитированием
Старый 12.04.2018, 16:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Не использовать СТРОКОВУЮ функцию strlen для последовательности байтов. Она изначально считает только до 0го байта.

Возьмите std::array, std::vector, span, ...
p51x вне форума Ответить с цитированием
Старый 12.04.2018, 20:28   #3
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Код:
sendto(this_s, buff, sizeof(buff), 0, (sockaddr *)&dest_addr, sizeof(dest_addr));
alexzk вне форума Ответить с цитированием
Старый 12.04.2018, 21:25   #4
Geks74
Новичок
Джуниор
 
Регистрация: 12.04.2018
Сообщений: 2
По умолчанию

Спасибо большое за наводку, все получилось.
Geks74 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача memoryStream через UDP сокет. xss22 Работа с сетью в Delphi 0 24.10.2011 08:26
Проблема с приёмом данных через UDP Shouldercannon Общие вопросы Delphi 0 21.05.2011 21:02
Передача списка и combobox'а через indy udp xatrix Общие вопросы Delphi 2 18.07.2010 16:14
Передача переменной через сокет Yura_S Общие вопросы Delphi 3 25.03.2010 09:53
Передача файла через сокет Delphi Unconnected Работа с сетью в Delphi 4 23.12.2008 16:16