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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2011, 10:52   #1
Kudryavtsev
Заблокирован
 
Регистрация: 26.04.2011
Сообщений: 39
Радость Правильная остановка ServerSocket и ClientSocket

Пишу крестики-нолики для игры по сети. В одном приложении вооплощаю и сервер и клиент. Пользователь выбирает сервер он или клиент. Собственно возникла проблема остановки ServerSocket и Clientsocket для смены портов.
Код:
ServerSocket.Active := False;
ServerSocket.Close;
ServerSocket.Port := 1234;
ClientSocket.Active := False;
ClientSocket.Close;
ClientSocket.Port := 1235;
ServerSocket.Active := True;
ClientSocket.Active := True;

такой код не катит...
можете помочь с этими сокетами?)
Kudryavtsev вне форума Ответить с цитированием
Старый 04.05.2011, 11:04   #2
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Код:
ServerSocket.Active := False;
и
Код:
ServerSocket.Close;
Походу одно и тоже
Код:
  ClientSocket1.Host := '127.0.0.1';
  ClientSocket1.Address := '127.0.0.1';
  ClientSocket1.Port := 1000;
  ClientSocket1.Active := True;
Рзве нельзя всё делать через один порт?

Последний раз редактировалось Shouldercannon; 04.05.2011 в 11:07.
Shouldercannon вне форума Ответить с цитированием
Старый 04.05.2011, 11:15   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
для смены портов.
Зачем менять порты? смысл в сем действе?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.05.2011, 11:16   #4
Kudryavtsev
Заблокирован
 
Регистрация: 26.04.2011
Сообщений: 39
По умолчанию

Проблема в другом. В программе два компонента ServerSocket и ClientSocket. Нужно сделать возможность выбора - сервер или клиент. Собственно когда выбираю чтобы приложение было серверным, то порты ServerSocket = 8080 а ClientSocket= 8081. Закончилась игра, и игрок захотел подключиться к серверу, собственно нужно сменить порты на ServerSocket = 8081 и ClientSocket= 8080.
Код:
procedure TUstoUs.ActivationClick(Sender: TObject);
begin
Server.Port:= 8080;
client.Port:=8081;
Server.Active:=true;
end;

procedure TUstoUs.ConnectionClick(Sender: TObject);
begin
Server.Port:= 8081;
client.Port:=8080;
Client.Host := IpEd.Text;
Client.Address := IpEd.Text;
Client.Active:=true;
Server.Active := true;
end;
Выкидывает ошибку, мол Can't change value while socket is active

P.s. Остановка сокета и смена портов не помогает...сыпало ошибками.
Код:
Server.Active:=False;
Server.Port:= 8080;
Server.Active:=true;
даже если использовать задержку delay, всё равно
Kudryavtsev вне форума Ответить с цитированием
Старый 04.05.2011, 19:50   #5
Kudryavtsev
Заблокирован
 
Регистрация: 26.04.2011
Сообщений: 39
По умолчанию

Поможет кто-нибудь?
Kudryavtsev вне форума Ответить с цитированием
Старый 05.05.2011, 19:30   #6
Kudryavtsev
Заблокирован
 
Регистрация: 26.04.2011
Сообщений: 39
По умолчанию

Компетентных людей, способных ответить на мой вопрос, на этом форуме нет?)
Kudryavtsev вне форума Ответить с цитированием
Старый 05.05.2011, 19:48   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

для сервера более правильным будет так(на мой взгляд):
1)согласно протоколу(и если предусмотрено) оповестить клиентов о том что отключение будет(чтоб они приготовились или же отключились)
2)сервер может(может!!!) подождать пока клиенты сами отключатся или же пока сервер закончит обработку клиентов(если нельзя резко оборвать) или отключить их.
3)закрывает серверный порт.
для клиента:
1)клиент согласно протоколу сообщает серверу что он отключается
2)ждет разрешение сервера(опционально) если например сервер должен чтото сделать(например выдать результат, который клиент должен сохранить)
3)отключается.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.05.2011, 20:17   #8
Kudryavtsev
Заблокирован
 
Регистрация: 26.04.2011
Сообщений: 39
По умолчанию

Ну у меня это происходит когда игра закончена и уже все.
Как мне правильно закрыть сокеты, сменить порты и опять их запустить?
Kudryavtsev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ClientSocket и ServerSocket. Vaigard Работа с сетью в Delphi 7 19.02.2011 08:56
serversocket-clientsocket ben95 Работа с сетью в Delphi 10 20.01.2011 08:28
ClientSocket и ServerSocket Hacker19_90 Работа с сетью в Delphi 1 23.03.2010 01:17
ClientSocket и ServerSocket Blood o men Работа с сетью в Delphi 2 25.11.2009 11:36
Serversocket,clientsocket prizrak1390 Работа с сетью в Delphi 10 21.04.2009 16:04