Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.03.2009, 19:15
Selw77 Selw77 вне форума
Прохожий
 
Регистрация: 12.03.2009
Сообщения: 2
Репутация: 10
По умолчанию TCPClient, TCPServer и интернет

Доброго времени суток!
Хотелось бы узнать, компоненты TCPClient и TCPServer работают через интернет?у сервера и у клиента IP динамические.
У меня не работает, скажи пожалуйста, что я делаю не так.
Заранее спасибо.

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

interface

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

type
  TForm1 = class(TForm)
    TcpClient1: TTcpClient;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
 
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  TcpClient1.RemoteHost := LabeledEdit1.Text;
  TcpClient1.RemotePort := LabeledEdit2.Text;
  TcpClient1.Active := true;
  TcpClient1.Connect;

  end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TcpClient1.Sendln(Memo1.Text);
end;

end.

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

interface

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

type
  TForm1 = class(TForm)
    TcpServer1: TTcpServer;
    Memo1: TMemo;
    procedure TcpServer1Accept(Sender: TObject;
      ClientSocket: TCustomIpClient);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
begin
  Memo1.Text := ClientSocket.Receiveln;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
Ответить с цитированием
  #2  
Старый 12.03.2009, 20:34
AlexTheC0d3r AlexTheC0d3r вне форума
Прохожий
 
Регистрация: 26.02.2009
Сообщения: 25
Репутация: 10
По умолчанию

Если сервер и клиент не находятся в одной локальной сети, то ничего у тебя НЕ ПОЛУЧИТЬСЯ!
Ответить с цитированием
  #3  
Старый 12.03.2009, 21:11
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,564
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Работают, если сервер имеет прямой выход в интернет.
Ответить с цитированием
  #4  
Старый 12.03.2009, 22:05
Celeron Celeron вне форума
Прохожий
 
Регистрация: 12.03.2009
Сообщения: 10
Репутация: 10
По умолчанию

Вообще с TCPClient, TCPServer не работал не знаю, но:
Не вижу чтобы серверу задавался порт с которого он принимает данные. Не вижу Сопоставление компоненте TCPServer вызываемой процедуры в случае входящего пакета, но судя по тексту должна быть TcpServer1Accept.
А так для сведения, по сетям соединяться можно как угодно, главное чтоб все было правильно организовано:
В сети компы должны быть в одной подсети и видеть друг друга.
По интернету у клиента должен быть нормальный доступ через маршрутизаторы выход до сервера. На сервере его ИП должен соответствовать тому куда "звонит" клиент и соответственно открыт порт на нем.
Примеры:
1) В ЛВС. ИП Клиента 192.168.0.15, сервер 192.168.0.21. Клиент "звонит" на 192.168.0.21 порт 1212. На сервере 1212 открыт серверной программой.
2) В интернет(Оба компа подключены напрямую и имеют на сетевых интерфейсах ИП типа 87.113.74.ХХ). Ситуация как и случае 1 Клиент звонит на 87.113.74.ХХ сервера на порт, порт открыт.
3) В интернет(Клиент подключен через ЛВС имеющую Роутер в инет, Клиент имеет на сетевом интерфейсе ИП типа 192.168.0.15, Сервер имеет на сетевом интерфейсе ИП типа 87.113.74.ХХ). Ситуация как и в случае 2 Клиент звонит на 87.113.74.ХХ сервера на порт, порт открыт. Маршрутизатор сам перенаправит пакет куда надо.
4) В интернет(Оба подключены через ЛВС имеющую Роутер в инет, Клиент имеет на сетевом интерфейсе ИП типа 192.168.хх.хх, Сервер имеет на сетевом интерфейсе ИП типа 192.168.хх.хх). Ситуация хоть и простая, но без сетевого Админа ты ее не решишь, Ибо Роутеры не маршрутизируют обратно. ПортМаппинг тебе в помощь.
Если что пиши в личку.
Ответить с цитированием
  #5  
Старый 12.03.2009, 22:12
Celeron Celeron вне форума
Прохожий
 
Регистрация: 12.03.2009
Сообщения: 10
Репутация: 10
По умолчанию

И вообще лучше пользуй TClientSocket;TServerSocket хоть и по сложнее, но по гибче.
Ответить с цитированием
  #6  
Старый 13.03.2009, 07:41
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Я сам не сильно много с этими компонентами работал, но заметил что Sendln параметр лучше использовать TStringStream.Create(Edit1.Text), тогда точно отправит текст
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #7  
Старый 13.03.2009, 14:23
Selw77 Selw77 вне форума
Прохожий
 
Регистрация: 12.03.2009
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо всем за советы.
КлиентСокет и СерверСокет использовал, аналогично.
Код программы рабочий.

К Админу обращаться?а как тогда работают другие программы подобного рода?
Ответить с цитированием
  #8  
Старый 13.03.2009, 18:36
Celeron Celeron вне форума
Прохожий
 
Регистрация: 12.03.2009
Сообщения: 10
Репутация: 10
По умолчанию

У меня TClientSocket;TServerSocket работают на ура. Если у тебя ситуация 4, то без админа я выхода не вижу. Другие проги могут работать кучей других способов. И рассматривать каждый из них у меня нет возможности, могу обьяснить решение если будет конкретная ситуация и я подскажу решение.
Ответить с цитированием
  #9  
Старый 13.05.2009, 22:50
Coder2k8 Coder2k8 вне форума
Прохожий
 
Регистрация: 06.05.2009
Сообщения: 16
Репутация: 10
По умолчанию

спасибо за код, помог моему обучению в сетевом программировании.
Только такой вопрос:
а как отправить строку с TCPServer, и принять её TCPClient?
Ответить с цитированием
  #10  
Старый 24.05.2009, 23:26
Аватар для Gens
Gens Gens вне форума
Прохожий
 
Регистрация: 17.03.2009
Сообщения: 12
Репутация: 10
Радость

Цитата:
Сообщение от AlexTheC0d3r
Если сервер и клиент не находятся в одной локальной сети, то ничего у тебя НЕ ПОЛУЧИТЬСЯ!


СОГЛАСЕН!!!

но если использовать tcp сервак и клиент из вкладки INDY то всё попрёт!!! а эти компоненты только для сети. Почаще читай help в delphi !!!
__________________
http://rgdgames.ucoz.ru/ всё для программиста и всё для создания игр
Ответить с цитированием
  #11  
Старый 24.05.2009, 23:28
Аватар для Gens
Gens Gens вне форума
Прохожий
 
Регистрация: 17.03.2009
Сообщения: 12
Репутация: 10
Радость

Да кстати актуальный вопрос. я тож не могу понять как серваку отправлять сообщение для клиентов? мб кто подскажет? я даж на форуме такую тему создавал
__________________
http://rgdgames.ucoz.ru/ всё для программиста и всё для создания игр
Ответить с цитированием
  #12  
Старый 26.05.2009, 11:15
D@rkD@iver D@rkD@iver вне форума
Прохожий
 
Регистрация: 25.05.2009
Сообщения: 3
Репутация: 10
По умолчанию

проблема такая же как и у тебя

через интерент Client не видит Server

использовал и TClientSocket и TIdTCPClient не работает, а через локалку работает

как ты справился с этой проблемой??

Помоги, очень нужно
мыло: darkdaiver777@gmail.com
аська: 412-842-920

Заранее спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter