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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.08.2008, 14:50
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию Помогите, пожалуйста исправить прогу(чат) для интернета

Есть код:

Код:
unit UnitInternet1;

interface

uses
   Winsock,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, ExtCtrls, AppEvnts, Menus;

type
  TForm1 = class(TForm)
    ClientSocket2: TClientSocket;
    ServerSocket2: TServerSocket;
    PanelServer: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    RemIP: TEdit;
    PanelClient: TPanel;
    Label3: TLabel;
    Label4: TLabel;
    RemIP2: TEdit;
    OutServer: TButton;
    Memo1: TMemo;
    Str2: TMemo;
    OutClient: TButton;
    Str: TMemo;
    MainMenu1: TMainMenu;
    Options: TMenuItem;
    SOptions: TMenuItem;
    GetIP: TMenuItem;
    SGetIP: TMenuItem;
    procedure ServerSocket2ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket2Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure OutServerClick(Sender: TObject);
    procedure ClientSocket2Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure OutClientClick(Sender: TObject);
    procedure SOptionsClick(Sender: TObject);
    procedure SGetIPClick(Sender: TObject);
    procedure FormDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure NOTTT(Sender: TObject);
    procedure NOTTT2(Sender: TObject; var CanClose: Boolean);
    procedure NOTTTT3(Sender: TObject);
    procedure NOTTT4(Sender: TObject; DockClient: TControl;
      var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
  private
    { Private declarations }
  public
  procedure SendMes(Text: String);
  end;

var
  Form1: TForm1;

implementation

uses UnitInternet1VS, Unit1InternetVIP;

{$R *.dfm}
procedure TForm1.ServerSocket2ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin // сервер получает информацию
RemIP.Text := Socket.RemoteAddress;
Str.Text   := Socket.ReceiveText  ;
end;

procedure TForm1.ClientSocket2Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin   // клиент получает информацию
RemIP2.Text := Socket.RemoteAddress;
Str2.Text   := Socket.ReceiveText  ;
end;

procedure TForm1.SendMes(Text: String);
var
  i: byte;
begin
  with ServerSocket2.Socket do
  begin
      for i := 0 to ActiveConnections - 1 do begin
      try
        Connections[i].SendText(Text);
        Application.ProcessMessages;
      except
      ShowMessage('Error при попытке отправить сообщение: '+Memo1.Text);
     end;
  end;
end;
end;


procedure TForm1.OutServerClick(Sender: TObject);
begin
Form1.SendMes(Memo1.Text);
end;

procedure TForm1.ClientSocket2Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Canvas.Pen.Mode    := pmBlack;
Canvas.Ellipse(0,0,40,30);
end;

procedure TForm1.OutClientClick(Sender: TObject);
begin
if ClientSocket2.Active = False then begin ShowMessage('Клиент не включён'); exit; end;
 try
  ClientSocket2.Socket.SendText(Memo1.Text);
 except
  ShowMessage('Error при попытке отправить сообщение: '+Memo1.Text);
 end;
end;

procedure TForm1.SOptionsClick(Sender: TObject);
begin
Form1.Enabled := False;
Form2.Left := Form1.Left-10;  
Form2.Show;
end;

procedure TForm1.SGetIPClick(Sender: TObject);
const
  WINSOCK_VERSION=$0101;
var
 WSAData: TWSAData;
 p: PHostEnt;
begin
 GetIPForm.Show;
 WSAStartup(WINSOCK_VERSION, WSAData);
 p:=GetHostByName(PChar(GetIPForm.Edit1.Text));
 GetIPForm.IP.TEXT:='IP: '+inet_ntoa(PInAddr(p.h_addr_list^)^);
 WSACleanup;
end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
Application.Terminate;
end;

procedure TForm1.NOTTT(Sender: TObject);
begin
//Нето
end;

procedure TForm1.NOTTT2(Sender: TObject; var CanClose: Boolean);
begin
//
end;

procedure TForm1.NOTTTT3(Sender: TObject);
begin
//
end;

procedure TForm1.NOTTT4(Sender: TObject; DockClient: TControl;
  var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
begin
//Application.Terminate;
end;

end.
Так вот скажите что надо сделать, чтоб проект заработал на 2-х машинах?
Ответить с цитированием
  #2  
Старый 31.08.2008, 14:53
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

надо пользоваться тегом [code] и запустив сервер, подключиться к нему.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #3  
Старый 31.08.2008, 21:08
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Цитата:
Сообщение от The Shadow
надо пользоваться тегом [code] и запустив сервер, подключиться к нему.

А тэгом это как? И ещё, когда тестируешь на 1 компе всё - ок, а на 2 не работает!
Ответить с цитированием
  #4  
Старый 31.08.2008, 22:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тэгом - это значит заключать код в эти теги (админа на тебя нету...).
А порты на файерволе открыть? А указывать IP компьютера-сервера, а не localhost?
Ответить с цитированием
  #5  
Старый 01.09.2008, 12:36
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Серавно не понял! Кто-нибудь может доходчего объяснить, что значит теги?
Ответить с цитированием
  #6  
Старый 01.09.2008, 12:56
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Про тэги читам тут.
И заканчиваем с глупыми вопросами, а то последуют санкции.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #7  
Старый 02.09.2008, 14:53
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

А вроде и так понятно, где код, а где его нет!
Ответить с цитированием
  #8  
Старый 02.09.2008, 15:15
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Вобщем, давайте с начала. У меня Delphi 7 и я создал приложение(чат) для интернета на основе компонентов TClientSocket и TServerSocket.
В код не включены 2 унита(UNIT) один из них показывает IP, а другой настраивает свойства клиента(Host;Adress;Port) и сервера(Port).
И вопрос, как запустить прогу, чтобы работало на 2 машинах?

Код:
 
unit UnitInternet1;

interface

uses
   Winsock,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, ExtCtrls, AppEvnts, Menus;

type
  TForm1 = class(TForm)
    ClientSocket2: TClientSocket;
    ServerSocket2: TServerSocket;
    PanelServer: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    RemIP: TEdit;
    PanelClient: TPanel;
    Label3: TLabel;
    Label4: TLabel;
    RemIP2: TEdit;
    OutServer: TButton;
    Memo1: TMemo;
    Str2: TMemo;
    OutClient: TButton;
    Str: TMemo;
    MainMenu1: TMainMenu;
    Options: TMenuItem;
    SOptions: TMenuItem;
    GetIP: TMenuItem;
    SGetIP: TMenuItem;
    procedure ServerSocket2ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket2Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure OutServerClick(Sender: TObject);
    procedure ClientSocket2Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure OutClientClick(Sender: TObject);
    procedure SOptionsClick(Sender: TObject);
    procedure SGetIPClick(Sender: TObject);
    procedure FormDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure NOTTT(Sender: TObject);
    procedure NOTTT2(Sender: TObject; var CanClose: Boolean);
    procedure NOTTTT3(Sender: TObject);
    procedure NOTTT4(Sender: TObject; DockClient: TControl;
      var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
  private
    { Private declarations }
  public
  procedure SendMes(Text: String);
  end;

var
  Form1: TForm1;

implementation

uses UnitInternet1VS, Unit1InternetVIP;

{$R *.dfm}
procedure TForm1.ServerSocket2ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin // сервер получает информацию
RemIP.Text := Socket.RemoteAddress;
Str.Text   := Socket.ReceiveText  ;
end;

procedure TForm1.ClientSocket2Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin   // клиент получает информацию
RemIP2.Text := Socket.RemoteAddress;
Str2.Text   := Socket.ReceiveText  ;
end;

procedure TForm1.SendMes(Text: String);
var
  i: byte;
begin
  with ServerSocket2.Socket do
  begin
      for i := 0 to ActiveConnections - 1 do begin
      try
        Connections[i].SendText(Text);
        Application.ProcessMessages;
      except
      ShowMessage('Error при попытке отправить сообщение: '+Memo1.Text);
     end;
  end;
end;
end;


procedure TForm1.OutServerClick(Sender: TObject);
begin
Form1.SendMes(Memo1.Text);
end;

procedure TForm1.ClientSocket2Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Canvas.Pen.Mode    := pmBlack;
Canvas.Ellipse(0,0,40,30);
end;

procedure TForm1.OutClientClick(Sender: TObject);
begin
if ClientSocket2.Active = False then begin ShowMessage('Клиент не включён'); exit; end;
 try
  ClientSocket2.Socket.SendText(Memo1.Text);
 except
  ShowMessage('Error при попытке отправить сообщение: '+Memo1.Text);
 end;
end;

procedure TForm1.SOptionsClick(Sender: TObject);
begin
Form1.Enabled := False;
Form2.Left := Form1.Left-10;  
Form2.Show;
end;

procedure TForm1.SGetIPClick(Sender: TObject);
const
  WINSOCK_VERSION=$0101;
var
 WSAData: TWSAData;
 p: PHostEnt;
begin
 GetIPForm.Show;
 WSAStartup(WINSOCK_VERSION, WSAData);
 p:=GetHostByName(PChar(GetIPForm.Edit1.Text));
 GetIPForm.IP.TEXT:='IP: '+inet_ntoa(PInAddr(p.h_addr_list^)^);
 WSACleanup;
end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
Application.Terminate;
end;

procedure TForm1.NOTTT(Sender: TObject);
begin
//Нето
end;

procedure TForm1.NOTTT2(Sender: TObject; var CanClose: Boolean);
begin
//
end;

procedure TForm1.NOTTTT3(Sender: TObject);
begin
//
end;

procedure TForm1.NOTTT4(Sender: TObject; DockClient: TControl;
  var InfluenceRect: TRect; MousePos: TPoint; var CanDock: Boolean);
begin
//Application.Terminate;
end;

end.
Ответить с цитированием
  #9  
Старый 03.09.2008, 05:04
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

DungeonLords, ага, с тэгами начинает получаться (хотя слабо еще пока), так что еще раз внимательно перечитываем тут.
А вот это:
Цитата:
А вроде и так понятно, где код, а где его нет!
попадает под пункты 3.3, 3.4, 3.5 правил, если ты считаешь что это не так то читай пункт 1.1 правил.

По совокупности - выношу предупреждение, при рецидиве - бан
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #10  
Старый 04.09.2008, 15:13
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

Цитата:
Сообщение от Aristarh Dark
...ага, с тэгами начинает получаться (хотя слабо еще пока)...


Почему слабо?

Последний раз редактировалось DungeonLords, 05.09.2008 в 15:05.
Ответить с цитированием
  #11  
Старый 06.09.2008, 21:26
_(Sly)_ _(Sly)_ вне форума
Прохожий
 
Регистрация: 06.09.2008
Сообщения: 4
Репутация: 10
По умолчанию SLY

Ну делай так:
-------SERVER-------
1. ServerSocket.Port:=123; так для наглядности
2. ServerSocket.Activate:=true;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var S:String;
begin
s:=Socket.ReceiveText();
Showmessage(S);
end;



------Client-------
1. ClientSocket1.Address:='1.1.1.1';
2. ClientSocket1.Port:=123;
3. ClientSocket1.Active:=true;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Showmessage('Connect...Ok');
ClientSocket1.Socket.SendText('HELLO');
end;


Простейшое соиденение которое передает строку HELLO!
Надеюсь чемто помог
Ответить с цитированием
  #12  
Старый 06.09.2008, 21:48
mskvkin mskvkin вне форума
Новичок
 
Регистрация: 31.08.2008
Сообщения: 99
Репутация: 10
Восклицание

Подклюси юниты где определяется IP и вместо localhost напиши полученнный IP
Ответить с цитированием
  #13  
Старый 06.09.2008, 21:51
mskvkin mskvkin вне форума
Новичок
 
Регистрация: 31.08.2008
Сообщения: 99
Репутация: 10
Восклицание Уже все готово

смотри тему я там все подробно описал ПРИШЕМ ЧАТ ClientSocket-ServerSocket
Ответить с цитированием
  #14  
Старый 07.09.2008, 22:11
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

(Sly),

Ты вообще смотрел, что я написал!!! Я по смыслу тоже самое написал!!! И ещё почему Adress='1.1.1.1', и что это вообще такое!
Ответить с цитированием
  #15  
Старый 07.09.2008, 22:14
DungeonLords DungeonLords вне форума
Активный
 
Регистрация: 21.07.2008
Сообщения: 257
Репутация: 14
По умолчанию

(mskvkin),

Твоё ПРИШЕМ ЧАТ ClientSocket-ServerSocket гавно(это цензурно!) страшное! Ерунда какая - то!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter