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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2013, 16:26   #1
oteccc
Пользователь
 
Регистрация: 13.11.2013
Сообщений: 37
По умолчанию Не отпровляет сообщения ServerSocket ClientSocket

Создал многопользовательский чат клиент- сервер коннект есть, а текст не отправляет в чем ошибка?


сервер:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    Button1: TButton;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
    serversocket1.Port:= 1111;
    ServerSocket1.Active:= True;
    
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     ServerSocket1.Active:= False;
     ServerSocket1.Close;
     close;
     
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
   s:string;
   i: integer;


begin
     //добовляем к строке сообщения клиента идентификатор его сокета
     s:= IntToStr(Socket.SocketHandle) + '>' + Socket.ReceiveText;

     //Добовляем сообщение в список
     ListBox1.Items.Add(s)          ;

     //перебираем все установленные соединения
     for I:= 0 to ServerSocket1.Socket.ActiveConnections -1 do

      //Проверяем если идентификатор очередного сокета не совпадает с иден-
      //тификатором сокета, приславшего сообщения , то..
      if ServerSocket1.Socket.Connections[i].SocketHandle <>
      Socket.SocketHandle then

      //Посылаем// очередной клиентской программе новое сообщение..
      ServerSocket1.Socket.Connections[i].SendText(s);




end;

end.

Клиент
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    ClientSocket1: TClientSocket;
    ListBox1: TListBox;
    Edit3: TEdit;
    Button2: TButton;
    Edit2: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
    //Подключение к серверу
    clientSocket1.Address:= Edit1.text;
    ClientSocket1.Port:= 1111;

    ClientSocket1.Active:= true;
    


end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
    ClientSocket1.Active:= False;
    ClientSocket1.Close;
    close;

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
     //Обработка данных от сервера
     //Добовляем новое сообщение от сервера в список
     ListBox1.Items.Add(Socket.ReceiveText);
     


end;

procedure TForm1.Button2Click(Sender: TObject);
begin

      ClientSocket1.Socket.SendText(Edit2.text+'>' +edit3.Text);

end;

end.
oteccc вне форума Ответить с цитированием
Старый 05.12.2013, 21:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как ты определил что не отправляется? Поставил точку прерывания на сервере?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.12.2013, 16:07   #3
oteccc
Пользователь
 
Регистрация: 13.11.2013
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А как ты определил что не отправляется? Поставил точку прерывания на сервере?
Я на своем проверял компе все работает, скинул чат другу у него коннект есть,а сообщения не передает
oteccc вне форума Ответить с цитированием
Старый 06.12.2013, 16:28   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

телепатор подсказывает что сервер остался у тебя...
а еще подсказывает что стоит файрвол или маршрутизатор, да? и ничего про проброс портов и про белые адреса мы не знаем?
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 06.12.2013 в 16:36.
Slym вне форума Ответить с цитированием
Старый 06.12.2013, 21:34   #5
oteccc
Пользователь
 
Регистрация: 13.11.2013
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
телепатор подсказывает что сервер остался у тебя...
а еще подсказывает что стоит файрвол или маршрутизатор, да? и ничего про проброс портов и про белые адреса мы не знаем?
да сервер стоит у меня, да файрвол стоит, что за белые адреса?
oteccc вне форума Ответить с цитированием
Старый 06.12.2013, 22:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что за белые адреса?
Статические адреса. Просто так через интернет клиент-сервер связаться не сможет, нужно чтоб принимающая сторона имела статический IP а у вас с другом он 99% динамический. Такое возможно только если использовать VPN. Тогда да, свяжется.
Но меня беспокоят слова:
Цитата:
коннект есть
Я не пойму коннект с компом твоего друга получился? Или что значит "коннект есть"?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.12.2013, 23:13   #7
oteccc
Пользователь
 
Регистрация: 13.11.2013
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Статические адреса. Просто так через интернет клиент-сервер связаться не сможет, нужно чтоб принимающая сторона имела статический IP а у вас с другом он 99% динамический. Такое возможно только если использовать VPN. Тогда да, свяжется.
Но меня беспокоят слова:
Я не пойму коннект с компом твоего друга получился? Или что значит "коннект есть"?
У меня стоит статический ip и использую VPN, нет коннекта нету я ошибся. у меня почему-то не открываются порты уже все перепробовал и в брандмауэре создавал правило и в антивирусе в файрволе ни чего не помогает
oteccc вне форума Ответить с цитированием
Старый 07.12.2013, 13:13   #8
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

в маршрутизаторе порт пробрось
http://yandex.ru/yandsearch?text=%D0...0%D0%B5&lr=237
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ClientSocket, ServerSocket - проблема с передачей сообщения Karateka Работа с сетью в Delphi 6 27.05.2013 10:24
Serversocket и ClientSocket myxosran Работа с сетью в Delphi 3 12.09.2011 20:30
ClientSocket и ServerSocket Arsenx777 Работа с сетью в Delphi 2 04.07.2011 10:13
ClientSocket и ServerSocket KoBRaAndrey Работа с сетью в Delphi 4 08.01.2010 19:21
Serversocket,clientsocket prizrak1390 Работа с сетью в Delphi 10 21.04.2009 16:04