|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите, пожалуйста исправить прогу(чат) для интернета
Есть код:
Код:
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
|
||||
|
||||
надо пользоваться тегом [code] и запустив сервер, подключиться к нему.
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#3
|
|||
|
|||
Цитата:
А тэгом это как? И ещё, когда тестируешь на 1 компе всё - ок, а на 2 не работает! |
#4
|
|||
|
|||
Тэгом - это значит заключать код в эти теги (админа на тебя нету...).
А порты на файерволе открыть? А указывать IP компьютера-сервера, а не localhost? |
#5
|
|||
|
|||
Серавно не понял! Кто-нибудь может доходчего объяснить, что значит теги?
|
#6
|
||||
|
||||
Про тэги читам тут.
И заканчиваем с глупыми вопросами, а то последуют санкции. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#7
|
|||
|
|||
А вроде и так понятно, где код, а где его нет!
|
#8
|
|||
|
|||
Вобщем, давайте с начала. У меня 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
|
||||
|
||||
DungeonLords, ага, с тэгами начинает получаться (хотя слабо еще пока), так что еще раз внимательно перечитываем тут.
А вот это: Цитата:
По совокупности - выношу предупреждение, при рецидиве - бан Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#10
|
|||
|
|||
Цитата:
Почему слабо? Последний раз редактировалось DungeonLords, 05.09.2008 в 15:05. |
#11
|
|||
|
|||
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
|
|||
|
|||
Подклюси юниты где определяется IP и вместо localhost напиши полученнный IP
|
#13
|
|||
|
|||
Уже все готово
смотри тему я там все подробно описал ПРИШЕМ ЧАТ ClientSocket-ServerSocket
|
#14
|
|||
|
|||
(Sly),
Ты вообще смотрел, что я написал!!! Я по смыслу тоже самое написал!!! И ещё почему Adress='1.1.1.1', и что это вообще такое! |
#15
|
|||
|
|||
(mskvkin),
Твоё ПРИШЕМ ЧАТ ClientSocket-ServerSocket гавно(это цензурно!) страшное! Ерунда какая - то! |