-
у меня была прога в которой одно значение вводимое с едита формировалось в пакет и передовалось по UDP протоколу,а теперь надо чтобы передовалось три значения,как это реальзовать в моём случае?
void __fastcall TForm1::Button1Click(TObject *Sender) {
// char tBuf[5] = {0x55,0x56,0x57,0x58,0x59}; char Buffer[255]; char * tBuf; char *lBuf; char * mBuf; char * pBuf; char * wBuf; char * dBuf; char Answer[255]; int iKount, i, ClearCount, err; AnsiString S, St, Se, S2, S3, str, Estr; ClearCount = 0;
tBuf = new char[ (Edit2->Text.Length() * 0,5) + 1 ]; strcpy( tBuf, Edit2->Text.c_str() );
lBuf = new char[ (Edit3->Text.Length() * 0,5) + 1 ]; strcpy( lBuf, Edit3->Text.c_str() );
mBuf = new char[ (Edit4->Text.Length() * 0,5) + 1 ]; strcpy( mBuf, Edit4->Text.c_str() );
sockaddr_in anAddr; anAddr.sin_family = AF_INET; anAddr.sin_port = htons(PORT); anAddr.sin_addr.S_un.S_addr = inet_addr(cp);
//îáìåí ñîîáùåíèé ñ ñåðâåðîì // óñòàíîâêà âîçìîæíîñòè àäðåñà if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == -1) { Memo1->Lines->Add("Error setting broadcast socket"); WSACleanup(); return; } HOSTENT *hst; sockaddr_in dest_addr; memset(&dest_addr, 0, sizeof(sockaddr_in)); dest_addr.sin_family=AF_INET; dest_addr.sin_port=htons(PORT);
// îïðåäåëåíèå IP-àäðåñà óçëà if (inet_addr(cp)) dest_addr.sin_addr.s_addr=inet_addr(cp); else if (hst=gethostbyname(cp)) dest_addr.sin_addr.s_addr=((unsigned long **)hst->h_addr_list)[0][0]; else { Memo2->Lines->Add("Íåèçâåñòíûé õîñò: " + IntToStr(WSAGetLastError())); closesocket(s); WSACleanup(); return; }
// Ïåðåäà÷à ñîîáùåíèé íà ñåðâåð iKount = sendto(s, tBuf, strlen(tBuf), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in)); if (iKount) {
for(i = 0; i < strlen(tBuf); i++)
{ St = S.sprintf("%0.2X",tBuf[i]); S3 += St + " "; } Memo2->Lines->Add(""); Memo2->Lines->Add("Ïåðåäàíî áàéò " + IntToStr(iKount)); Memo2->Lines->Add( Edit2->Text); Memo2->Lines->Add( Edit3->Text); Memo2->Lines->Add( Edit4->Text); //Memo2->Lines->Add(S3);
-
> у меня была прога в которой одно значение вводимое с едита > формировалось в пакет и передовалось по UDP протоколу,а > теперь надо чтобы передовалось три значения
Три раза передать по одному?
-
нет,одновременно ,в одном пакете
-
по отдельности я уже передовал,а мне надо один заходом
-
У меня Эдит1,Эдит2,Эдит3 ,я ввожу туда данные(слова,цифры) отправить надо в одном покете,не по отдельности,а одновременно.Звеняйте за тавтологию
-
Этом коде передается в пакете только с первого Эдита tBuf = new char[ (Edit2->Text.Length() * 0,5) + 1 ]; strcpy( tBuf, Edit2->Text.c_str() );
вот iKount = sendto(s, tBuf, strlen(tBuf), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in));
а у меня ещё есть
lBuf = new char[ (Edit3->Text.Length() * 0,5) + 1 ]; strcpy( lBuf, Edit3->Text.c_str() );
mBuf = new char[ (Edit4->Text.Length() * 0,5) + 1 ]; strcpy( mBuf, Edit4->Text.c_str() );
а как сделать чтобы одим пакетом все 3 параметра отправились не знаю.
-
> west19 (08.10.13 16:52) [2] > нет,одновременно ,в одном пакете
Ну в одном пакете или не одном решать не тебе, а операционной системе, но в принципе можешь склеить все свои три буфера в один и отправить его. В чем проблема то? В склеивании трех буферов в один? Или в расклеивании их в месте приема? Сначала клеишь в буфер длину, потом данные, потом опять длину и опять данные и так три раза. Потом буфер отсылаешь.
-
а можешь мне подробней рассказать как их склеять ???
-
смотри,у меня как бы есть 3 эдита,из них ввожу три числа,это координаты по сути(х,у,z) и эти координаты мне надо отправить в пакете
-
я создаю каждому числу буфер tBuf = new char[ (Edit2->Text.Length() * 0,5) + 1 ]; strcpy( tBuf, Edit2->Text.c_str() );
lBuf = new char[ (Edit3->Text.Length() * 0,5) + 1 ]; strcpy( lBuf, Edit3->Text.c_str() );
mBuf = new char[ (Edit4->Text.Length() * 0,5) + 1 ]; strcpy( mBuf, Edit4->Text.c_str() );
но отправить мне надо только одной коммандой.подскажи как правильно это сделать,если можешь кодом
-
> [9] west19 (09.10.13 09:23) > я создаю каждому числу буфер
Это не числа, а строки. Почувствуй разницу.
Это ещё что за манипуляции с размером? Типа юникод так преобразуется в чё-то там?
> [9] west19 (09.10.13 09:23) > Edit2->Text.Length() * 0,5
> [9] west19 (09.10.13 09:23) > если можешь кодом
Edit2->Text + Edit3->Text + Edit4->Text И не надо никуда копировать ни strcpy ни е ещё чем. Какая там кодировка в отправляемом пакете? Вот в неё и надо отконвертировать.
-
> [10] Inovet © (09.10.13 11:10) > Edit2->Text + Edit3->Text + Edit4->Text
Да, разделитель ещё какой-нибудь Edit2->Text + ' ' + Edit3->Text + ' ' + Edit4->Text
-
так куда именно это писать ??? Edit2->Text + ' ' + Edit3->Text + ' ' + Edit4->Text звеняйте за глупый вопрос
-
а,и кто знает как сделать чтобы число вводимое в эдит сперва умножалось к примеру на 4 ???
-
> [12] west19 (09.10.13 11:30) > так куда именно это писать
Например в String Buf; > [13] west19 (09.10.13 11:39) > число вводимое в эдит сперва умножалось к примеру на 4
Ты ответы читаешь выборочно?
> [10] Inovet © (09.10.13 11:10) > Это не числа, а строки. Почувствуй разницу.
Текстовое представление числа. Следом вопрос: Какое там число? А то они разные бывают, если что.
-
слушай,а ты можешь глянуть исходник,я щас загружу,и если там не много,то исправить,а то вообще башка кипит,не сооброжаю,и я понял о чем ты говоришь по поводу строк http://www.fayloobmennik.net/3253458
-
Не сказано, какого вида строка должна уйти на сервер. Пример покажи
-
должны отправлятся байты №1 байта - значение 0x00 №2 байта - значение 0x00...0xFF №3 байта - значение 0x00...0xFF №4,5 байта - значение 0x0000...0X02D0
-
где №2 байта это то что мы вводим в эви2 где №3 байта это то что мы вводим в эви3 где №4,5 байта это то что мы вводим в эви4
-
значение №1 байта это новер команды (0x10) значение №2 байта это то что мы вводим в эдит 2 - и это состоит из одного байта значение №3 байта это то что мы вводим в эдит 3 - и это состоит из одного байта значение №4,5 байта это то что мы вводим в эдит 3 - и это состоит из двух байт 4 байт старший,а 5 младший
|