вообще на сокет подаются по сути байты.
как выглядит функция отправки данных send у вас в С++ builder ?
я так понимаю как и у всех. оправляется байтовый буфер const char * buf
следовательно вы можете отправить ваши 3 переменные
send(SOCKET, &прм, sizeof(прм), 0)
в случае с UDP sendto аналоргично
#include <vcl.h> #include <iostream> #include <winsock2.h> #include <windows.h> #include <stdio.h> #include <sstream> using namespace std; #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { if (argc<3) { MessageBox(NULL,"\nIP\nport\nstrforSend",NULL,MB_OK); return (-1); } char * ipServer= argv[1]; char * _portServer= argv[2]; char * strin= argv[argc-1]; char strsend[512]; unsigned short portServer; std::stringstream ss(_portServer); ss >> portServer; WSADATA WsaData; // int err = WSAStartup (0x0101, &WsaData); cout<<ipServer<<" "<<portServer<<" "<<strin<<endl; if (err == SOCKET_ERROR) { printf ("WSAStartup() failed: %ld\n", GetLastError ()); return 1; } SOCKADDR_IN sin; // "SOCKADDR_IN" sin.sin_family = AF_INET; sin.sin_port = htons(portServer); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_addr.S_un.S_addr=inet_addr(ipServer); SOCKET s; s = socket(AF_INET, SOCK_STREAM, 0); err=connect(s,(struct sockaddr*)&sin, sizeof(sin)); send(s, strin,strlen(strin),MSG_DONTROUTE); closesocket(s); WSACleanup(); return 0; } //---------------------------------------------------------------------------
Я конечно нашел как но что то у меня корявый код (но рабочий) получился.
Думаю должно быть как то проще
Вот первые отправки через мою модификацию кода, а последние тот что выложен выше. тоесть на сокет отправляю строку
000000380000AACC00005823
а получаю 303030303030333830303030414143433030303035383233 в читаемом виде.
почему ?
char * strin= argv[argc-1];
почему ?
Берем последний параметр с которым вызывается данный exe
к примеру
Project1.exe 192.168.0.205 62000 000000380000AACC00005823
вы не поняли.
я спрашиваю - почему вы подаете инфу в таком неудобном строковом 16-виде ?
вы не поняли.
я спрашиваю - почему вы подаете инфу в таком неудобном строковом 16-виде ?
Данное приложение было необходимо как примочка к SCADA системе RSView32 в которой есть VBA но который не понимает AddresOf. Задача была передать данные с этой системы (несколько подряд за одну передачу) на удаленный сокет с которого прогина пришедшие данные парсит последовательно согласно задания типа первое число 2 байта, второе 4 байта, третье 2 байта...
но прогина воспринимает не текст а именно его HEX значения.
вот в качестве кастыля к этой SCADA дописал это приложение...
Сейчас задача подружить OPC сервер с тем же удаленным хостом. Софт для сбора данных с ОРС уже написал, теперь вот отправить нужно аналогично.
То есть выше это пример (обычный из интернета по принципу миниатюрного чата) хотел взять за основу, "но красивее" сделать..
моя логика не в состоянии... извините.
Допустим, преобразовали. Нолики в начале строки не обломают всю малину?
Как не странно нет.
На картинке выше видно что в HEX нолики тоже приходят и не "зануляются"(не отбрасываются) и не важно сколько их там ноликов будет.
Но мой вариант это еще строчек 20 наверное в + к текущему коду. Вот и решил спросить на форуме у знающих людей.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Люди помогите с одной загвоздкой.
Пишу приложение клиент-сервер на C++ билдере.
Есть строка AnsiString 00000042000053D100003821
это три числа 66, 21457, 14369 в HEX виде при длине 4 байта
Эту строку необходимо переслать на сокет, но так чтобы она пришла туда не как текст, а именно как HEX строка, то есть то что будет читаться в текстовом режиме на удаленном сокете это будут "каркозяблы" то есть символы соответствующие кодам 00 00 00 42 00 00 53 D1 00 00 38 21.
Как мне имея эту строку в билдере в виде AnsiString передать (или сначала конвертировать) чтобы она на конечный сокет пришла в виде HEX значений.
Использую winsock2.h из него создание сокета, соединение, отправка.
Спасибо. Может кончено это не столь специфический форум, но думаю программистов здесь много не только MQL.