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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2014, 00:07   #1
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию Socket Error #10057

Вообщем сделал чат клиент-сервер. Создаю сервер, подключаю клиент с сервера посылаю команду, и ошибка

А если посылать с клиента на сервер то все нормально.
Поиском пользовался но толковое решение данной проблемы я так и не нашёл
Т.к. в проекте используется AlphaSkins, выкладываю исходный код.

Client
Код:
var
  Form1: TForm1;
  Login: String = '';

implementation

{$R *.dfm}

procedure TForm1.sButton1Click(Sender: TObject);
begin
if Trim(sEdit2.Text) <> '' then begin
ClientSocket1.Host := '127.0.0.1';
ClientSocket1.Port := 1120;
ClientSocket1.Open;
Login := sEdit2.Text;
end else ShowMessage('Необходимо ввести логин!');
end;

procedure TForm1.sButton2Click(Sender: TObject);
begin
if Trim(sEdit1.Text) <> '' then begin
ClientSocket1.Socket.SendText(Login + ': '+sEdit1.Text);
sMemo1.Lines.Add(Login + ': '+sEdit1.Text);
end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
sButton1.Enabled := False;
sButton3.Enabled := True;
sGroupBox2.Enabled := True;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
sButton1.Enabled := True;
sButton3.Enabled := False;
sGroupBox2.Enabled := False;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
  var text: string;
begin
text := Socket.ReceiveText;
sMemo1.Lines.Add(text);
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
    if ErrorCode = 10061 then
    begin
      ClientSocket1.Close;
      showmessage('ERROR #61: Сервер в данное время недоступен!');
      ErrorCode := 0;
    end;
    if ErrorCode = 10049 then
    begin
      ClientSocket1.Close;
      showmessage('ERROR #49: Данного сервера не существует!');
      ErrorCode := 0;
    end;
    if ErrorCode = 10053 then
    begin
      ClientSocket1.Close;
      showmessage('ERROR #53: Сервер неожиданно отключился!');
      ErrorCode := 0;
    end;
    if ErrorCode = 10060 then
    begin
      ClientSocket1.Close;
      showmessage('ERROR #60: Попытка подключения не удалась, т.к. сервер вовремя не ответил!');
      ErrorCode := 0;
    end;
end;

procedure TForm1.sButton3Click(Sender: TObject);
begin
ClientSocket1.Close;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ClientSocket1.Close;
end;

end.
Server
Код:
var
  Form1: TForm1;
  Login: String = '';

implementation

{$R *.dfm}

procedure TForm1.sButton1Click(Sender: TObject);
begin
if Trim(sEdit2.Text) <> '' then begin
ServerSocket1.Port := 1120;
ServerSocket1.Open;
Login := sEdit2.Text;
sButton1.Enabled := False;
sButton3.Enabled := True;
sGroupBox3.Enabled := True;
end else ShowMessage('Необходимо ввести логин!');
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var text: string;
begin
text := Socket.ReceiveText;
sMemo1.Lines.Add(text);
end;

procedure TForm1.sButton2Click(Sender: TObject);
begin
if Trim(sEdit3.Text) <> '' then begin
ServerSocket1.Socket.SendText(Login+': '+sEdit3.Text);
sMemo1.Lines.Add(Login+': '+sEdit3.Text);
end;
end;

procedure TForm1.sButton3Click(Sender: TObject);
begin
ServerSocket1.Close;
sButton1.Enabled := True;
sButton3.Enabled := False;
sGroupBox3.Enabled := False;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ServerSocket1.Close;
end;

end.
PaHaNjkee вне форума Ответить с цитированием
Старый 16.03.2014, 07:20   #2
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 16.03.2014, 10:37   #3
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию

Цитата:
Сообщение от Larboss Посмотреть сообщение
Это все я видел, но что я не правильно сделал?!

Вот исходник к примеру
Вложения
Тип файла: rar Test.rar (182.1 Кб, 18 просмотров)

Последний раз редактировалось Stilet; 16.03.2014 в 12:16.
PaHaNjkee вне форума Ответить с цитированием
Старый 16.03.2014, 12:18   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
PaHaNjkee
Я немножко не могу понять, а как ты с сервера собираешься посылать текст, не указав серверу на какой хост посылать? Т.е. ServerSocket1.Socket.SendText ты написал, но куда он будет посылать где определено?
И зачем ксати посылать с сервера сообщения по нажатию кнопки?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2014, 12:26   #5
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я немножко не могу понять, а как ты с сервера собираешься посылать текст, не указав серверу на какой хост посылать? Т.е. ServerSocket1.Socket.SendText ты написал, но куда он будет посылать где определено?
И зачем ксати посылать с сервера сообщения по нажатию кнопки?
Т.е. нужно
Код:
var b: byte;
ServerSocket1.Socket.Connections[b].SendText(...);
?

А как еще можно, если не по нажатию по кнопке?
PaHaNjkee вне форума Ответить с цитированием
Старый 16.03.2014, 12:30   #6
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию

Код:
ServerSocket1.Socket.Connections[0].SendText(...);
Помогло, спасибо, тему можно закрывать.
PaHaNjkee вне форума Ответить с цитированием
Старый 16.03.2014, 12:31   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Т.е. нужно
Ну да
Опять таки клиент должен быть подключен.
Цитата:
А как еще можно, если не по нажатию по кнопке?
Ну как вот я понимаю: Сервер призван отвечать на запросы клиента. Так? Значит посылать он что-то должен в событиях обработки запроса от клиента, а не отдельно. Я не спорю, что есть задачи, когда сервер должен как-то уведомить клиентов, но в в данном случае как-то не вижу смысла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2014, 13:12   #8
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию

У меня еще один вопрос Есть сервер, к нему подключаются 2 клиента (А и В), первый клиент(A) отправляет команду серверу. Можно сделать так что-бы сервер отвечал не только клиенту(А), но и клиенту (В).
PaHaNjkee вне форума Ответить с цитированием
Старый 16.03.2014, 13:35   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Т.е. широковещательная рассылка? Ну у тебя же есть массив ServerSocket1.Socket.Connections[]. По нему в цикле и пробегай посылая строку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Socket Already in Use (error 10048) spirit-ua Общие вопросы Delphi 15 07.03.2014 10:31
socket error 10053 DELPHI161 Работа с сетью в Delphi 4 07.06.2013 18:03
socket error 10053 DELPHI161 Работа с сетью в Delphi 0 05.06.2013 10:15
Socket Error 10060 romeo32russ Работа с сетью в Delphi 1 24.10.2011 11:36
Socket Error 10054 RIO Работа с сетью в Delphi 5 22.09.2009 16:24