Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/56: Рейтинг темы: голосов - 56, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 15
1

Передача переменных по TcpClient/TcpServer

13.07.2013, 09:21. Показов 10405. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу программу удаленного управления, написал часть сервера и часть клиента, теперь от сервера нужно передать 2 переменные типа integer клиенту, чтобы он принял их и по ним поставил курсор. Помогите с этим пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2013, 09:21
Ответы с готовыми решениями:

Передача файлов от сервера к клиенту. TcpServer/TcpClient
Здравствуйте. Написал программу которая отправляет файл на сервер, на основе TcpServer/TcpClient....

TcpServer и TcpClient
клиент: TcpClient1.RemoteHost:='127.0.0.1'; TcpClient1.RemotePort:='2020'; TcpClient1.Connect;...

tcpserver и tcpclient, удалённый компьютер
Подскажите, пожалуйста, как передавать текст с помощью компонентов tcpserver и tcpclient по сети,...

Tcpclient & tcpServer онлайн
В одной программе стоит компонент idTcpClient a в другой idTcpServer почемуто когда я работаю я...

32
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
13.07.2013, 15:23 2
Преобразуй в текст(inttostr) и передай, приемник уже примет текст и преобразует в число(strtoint). Дальше уже ставь.
0
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
13.07.2013, 15:30 3
саша40, Зачем переводить в строку? Увеличивать размер?
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
13.07.2013, 15:37 4
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
Зачем переводить в строку? Увеличивать размер?
Строкой передать легче. Просто Writeln. Размеры это не увеличит.
0
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
14.07.2013, 01:36 5
Цитата Сообщение от саша40 Посмотреть сообщение
Строкой передать легче. Просто Writeln. Размеры это не увеличит.
т.е. число 200000 весом в 4 байта перевести в строку "200000" останется 4 байта?
0
1 / 1 / 0
Регистрация: 18.07.2012
Сообщений: 16
14.07.2013, 02:36 6
Цитата Сообщение от саша40 Посмотреть сообщение
Строкой передать легче. Просто Writeln.
)))
ты хотя бы раз обратил внимание на то как отправляется буфер? и зачем там указывается конкретный участок памети ?
ведь буфером можно отправить все что угодно )
не проще будет собрать там данные в рекорд и просто отправить его ?))
Delphi
1
2
3
4
5
6
7
8
9
type
coordinat = record
visota : word;
dlina : word;
end;
...
coordinat.dlina:=mish.X;
coordinat.visota:=mish.Y;
...sendbuf(coordinat,sizeof(coordinat));
и ловить его лучше сразу в такой же тип с двумя вордами, без лишней суеты.
в памяти длина ворда ограничивается двумя байтами и число в диапазоне (0,65535) вполне подходит в данный случаи

а еще проще
Delphi
1
2
3
4
5
var mps : Tpoint;
...
GetCursorPos(mps);
SendBuf(mps,sizeof(mps));
...
0
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 15
14.07.2013, 14:18  [ТС] 7
я их подключил, а передать данные никак не получается((
0
1 / 1 / 0
Регистрация: 18.07.2012
Сообщений: 16
14.07.2013, 20:07 8
Цитата Сообщение от PTyTb Посмотреть сообщение
я их подключил, а передать данные никак не получается((
что ты питаешься передать ? тип или переменная данного типа ?


код в студию
0
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 15
14.07.2013, 20:20  [ТС] 9
Server:
Delphi
1
2
3
4
5
procedure TForm1.Button4Click(Sender: TObject);
begin
tcpclient1.ReceiveBuf(p,sizeof(p));
label2.Caption:=inttostr(p);
end;
Client:
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button4Click(Sender: TObject);
begin
GetCursorPos(q);
p:=q.x;
tcpserver1.SendBuf(p,sizeof(p));
label2.Caption:=inttostr(p);
end;
Добавлено через 7 минут
на клиенте в label2 написаны координаты оси Х, а на сервере в Label2 написано 0....
0
1 / 1 / 0
Регистрация: 18.07.2012
Сообщений: 16
14.07.2013, 21:03 10
Client:
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button4Click(Sender: TObject);
var q:Tpoint;
begin
GetCursorPos(q);
tcpserver1.SendBuf(q,sizeof(q),0);
label2.Caption:=inttostr(q.x)+inttostr(q.y);
end;

Server:
Delphi
1
2
3
4
5
6
7
var p : Tpoint;
begin
...
tcpclient1.ReceiveBuf(p,sizeof(p),0);
label2.Caption:=inttostr(p.x)+inttostr(p.y);
 
end;
вряд ли ты послушаешь сокет сервера таким образом
Цитата Сообщение от PTyTb Посмотреть сообщение
Server:
Delphi
1
2
3
4
procedure TForm1.Button4Click(Sender: TObject);
begin
tcpclient1.ReceiveBuf(p,sizeof(p));
...
погугли как работать с TcpClient/TcpServer
1
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 15
14.07.2013, 23:21  [ТС] 11
не передает переменные((((( печаль беда..
и в стринге тоже...
0
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 102
15.07.2013, 15:33 12
PTyTb, ты пытаешься прочитать данные с сокета при клике на кнопке?
Delphi
1
2
3
4
5
procedure TForm1.Button4Click(Sender: TObject);
begin
tcpclient1.ReceiveBuf(p,sizeof(p));
label2.Caption:=inttostr(p);
end;
считывай их в процедуре события OnRead
0
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 15
15.07.2013, 21:22  [ТС] 13
там нет такой(( только OnListening (наиболее подходящее)
0
пофигист широкого профиля
4755 / 3190 / 861
Регистрация: 15.07.2013
Сообщений: 18,470
15.07.2013, 21:51 14
Цитата Сообщение от PTyTb Посмотреть сообщение
только OnListening (наиболее подходящее)
OnListening не годится. Это событие возбуждается до установления связи с клиентом.
У предка классов ТTcpClient/ТTcpServer есть событие OnReceive.

А вообще настоятельно рекомендую забыть пока еще не стало поздно эти недоделанные 12 лет назад компоненты и работать с библиотекой Indy или с (рекомендую лично как лучшую) библиотекой ICS http://www.overbyte.be/frame_index.html
0
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 15
15.07.2013, 22:10  [ТС] 15
попробую на инди... просто пипец как на лаве влетел, а тут заводу нужна удаленка на 900 машин
0
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 102
16.07.2013, 01:10 16
PTyTb, не изучал TcpClient/TcpServer поэтому думал, что речь шла про Инди.
Сейчас посмотрел про них - TcpServer сложен для начинающего, т.к. требует кроме сокетов еще и изучения многопоточности (TThread). .
Для более легкого знакомства с сокетами годится TServerSocket/TClientSocket, на них же можно опосля опробовать многопоточность (режим stThreadBlocking). Описание работы с компонентами.
Пример работы с TServerSocket/TClientSocket через SendText ExampleSocket.rar (XE2)
На форме слева - мемо и кнопки для старт/стоп сервера. Справа - мемо и кнопки для подключения/отключения клиента к серверу, а также поле ввода и кнопка отправления текста серверу. Сервер при приеме текста от клиента отправляет принятый текст отправителю и всем подключенным клиентам (!). В идеале отправитель должен получить два экземпляра отправленного текста.
После запуска программы нажимаем Start (запускаем сервер), в окне слева (сервера) видим запись о старте сервера. Подключим клиента к серверу кнопкой Connect - увидим подтверждающие сообщения в мемо сервера и клиента. В поле для ввода введем любой текст и отправим его кнопкой Send. Увидим отправленный от клиента текст в мемо сервера и принятый от сервера текст в мемо клиента.
Но! На стороне сервера принятый текст от клиента мы отправляем два раза - конкретно самому отправителю и в цикле общей отправки.
Обратите здесь внимание!
Т.е. в идеале отправитель должен получить два экземпляра отправленного текста.
Но, почему-то этого не произошло. Введём любой текст в поле ввода и отправим его кнопкой Send.
Что мы видим в мемо клиента? Текст от предыдущего сообщения соединился с текстом только что отправленного.
Почему?
Попробуйте добавить в конце отправляемого сообщения символ конца строки '#10'.
Получается? Всегда?
Попробуйте отправить строку размером больше 8 КБ.

Надеюсь, теперь вы понимаете куда копать, что прочитать и изучить.
0
474 / 337 / 36
Регистрация: 31.05.2011
Сообщений: 1,162
16.07.2013, 18:26 17
Клиент-Сервер, под нужды какой то темы этого форума.
Клиент отправляет чота, сервер принимает чота и отправляет обратно тому кто отправил это самое чота, при желании не трудно изменить.
Вложения
Тип файла: zip Клиент - Сервер.zip (50.5 Кб, 158 просмотров)
0
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 15
16.07.2013, 20:49  [ТС] 18
БогДелфей, спасибо спасибо спасибо спасибо!!!!!!
0
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 15
17.07.2013, 21:54  [ТС] 19
ааа, нет нифига не работает(((
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.07.2013, 22:39 20
Цитата Сообщение от PTyTb Посмотреть сообщение
нифига не работает
И хорошо что не работает.
Если бы заработало, ты бы еще раз "пипец как на лаве влетел", когда выстрелили бы грабли, спрятанные писателем-умельцем в server.dpr)
0
17.07.2013, 22:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2013, 22:39
Помогаю со студенческими работами здесь

Не могу найти в дельфи TCPServer TCPClient
Народ! Помогите! Ни как не могу найти в дельфи TCPServer\TCPClient... подскажите как подключить...

Где можно почитать о TCPClient, TCPServer
никак не могу найтир по ним нужную информацию, подскажите какую нить статью или учебник по работе с...

Indy 10 TCPServer/TCPClient Error #10061 Connection refused
Я написал сервер и клиент на indy 10, при использовании в клиенте локального IP сервера всё...

Компоненты TCPServer и TCPClient
Люди подскажите где можно нарыть примеры по использованию компонентов TCPServer и TCPClient...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru