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

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

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 16:13   #1
zicon
 
Регистрация: 17.08.2009
Сообщений: 3
По умолчанию Вопрос по грамотной работе с TClientSocket и TServerSocket

Постараюсь описать подробнее дабы не привлекать телепатов)

В общем начал я разбираться с работой сокетов, основы вроде бы понял
в общем есть ServerSocket с портом 91 у которого в ClientRead

Цитата:
ServerSocket1.Socket.Connections[0].SendText('123'); //(1)
Socket.SendText('333');//(2) не знаю какой из вариантов более верен
Memo1.Lines.Add('Получено сообщение>>'+Socket.ReceiveText);
Socket.Close;
набирая в броузере на втором компе "мой ip:91" получаю в мемо текст запроса а в броузере 123333 а значит сервер работает

Дальше есть клиент у которого по в Read
Цитата:
Memo1.Lines.Add('Ответ сервера>>'+Socket.ReceiveText);
//Memo1.Lines.Add('Ответ сервера>>'+ClientSocket1.Socket.Rec eiveText);
а вот дальше возникает проблема
по кнопке делаю
Цитата:
Clientsocket1.Socket.SendText(Memo2 .Text);
Сервер получает запрос и пишет его в мемо, но ответный
Цитата:
SendText('123')
в мемо не отображаеться не смотря на то что в read у клиента, тоесть либо клиент не получает ответ, либо сервер его не отсылает (что невозможно, если смотреть проверку в броузере)

и вторая проблема
Цитата:
Clientsocket1.Socket.SendText(Memo2 .Text);
срабатывает только один раз, второй раз сервер не реагирует на запрос, хотя при проверке в броузере количество раз не ограничено.. Я подозреваю что клиент нужно выключать, но
Цитата:
Clientsocket1.Socket.Close;
не помогло...
В общем помогите кто может
zicon вне форума Ответить с цитированием
Старый 18.01.2011, 16:52   #2
IceMage
Пользователь
 
Регистрация: 12.07.2008
Сообщений: 15
По умолчанию

Цитата:
Сообщение от zicon Посмотреть сообщение
ServerSocket1.Socket.Connections[0].SendText('123');
При этом первому клиенту полетит 123 (при запросе сервера любым клиентом)
Цитата:
Сообщение от zicon Посмотреть сообщение
Socket.SendText('333');
А тут именно тому клиенту, который сделал запрос.
Но не суть, мне более интересна строка
Цитата:
Сообщение от zicon Посмотреть сообщение
Socket.Close;
в ClientRead сервера. Естественно он второй раз не реагирует, сокет же закрыт О.о

Последний раз редактировалось IceMage; 18.01.2011 в 16:54. Причина: bb code
IceMage вне форума Ответить с цитированием
Старый 18.01.2011, 17:02   #3
IceMage
Пользователь
 
Регистрация: 12.07.2008
Сообщений: 15
По умолчанию

Цитата:
Сообщение от zicon Посмотреть сообщение
Я подозреваю что клиент нужно выключать
По аналогии с файловым потоком? Нет, клиент нужно выключать только по завершении работы с ним, т.е. когда все, что нужно уже послано
Правда, может наблюдаться проблемка, когда ты делаешь два раза подряд SendText, а принимаешь один раз "слившийся в одно"
IceMage вне форума Ответить с цитированием
Старый 18.01.2011, 17:33   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от zicon Посмотреть сообщение
хотя при проверке в броузере количество раз не ограничено..
Так бравзер каждый раз новое соединение (читай сокет) создает.
Сервер лучше телнетом тестировать.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.01.2011, 21:44   #5
zicon
 
Регистрация: 17.08.2009
Сообщений: 3
Смущение

Цитата:
Сообщение от veniside Посмотреть сообщение
Так бравзер каждый раз новое соединение (читай сокет) создает.
Цитата:
Сообщение от IceMage Посмотреть сообщение
Но не суть, мне более интересна строка
Цитата:
Сообщение от zicon
Socket.Close;
в ClientRead сервера. Естественно он второй раз не реагирует, сокет же закрыт О.о
Да, все дошло, сркет нужно закрывать только если клиент этого ожидает как броузер, который ждет завершения конекта для отображения, и клиент нужно конектить заново для следующего сообщения, а в случае чата просто не нужно закрывать

Спасибо))
zicon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TClientSocket и TServerSocket _-Re@l-_ Работа с сетью в Delphi 2 29.11.2010 16:22
TServerSocket и TClientSocket grafgrial Общие вопросы Delphi 3 25.08.2010 15:15
TServerSocket, TClientSocket prod87 Работа с сетью в Delphi 7 26.10.2009 22:38
Проблема с TClientSocket, TServerSocket PLOT_HD Работа с сетью в Delphi 4 11.08.2007 17:03