unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, ExtCtrls, registry;
type
TfrmMain = class(TForm)
Server: TServerSocket;
procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
registry: TRegistry;
i: string;
implementation
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
Server.Open; //Запускаем сервер
end;
procedure TfrmMain.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
i := socket.ReceiveText;
// if i='<имя команды>' then
// <Действие команды>;
end;
end.
Приложение типа Клиент-Сервер
Подскажите ПЛИЗ что делать? Я облазил весь инет, но ниче дельного не нашел =((
Вот код...
Сервер:
Код:
Клиент:
Код:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, Buttons, ComCtrls;
type
TfrmMain = class(TForm)
Client: TClientSocket;
edIP: TEdit;
Label1: TLabel;
btConnect: TBitBtn;
Label2: TLabel;
edCommand: TEdit;
btCommand: TBitBtn;
btDisconnect: TBitBtn;
btExit: TBitBtn;
stBar: TStatusBar;
procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure btCommandClick(Sender: TObject);
procedure btDisconnectClick(Sender: TObject);
procedure btConnectClick(Sender: TObject);
procedure btExitClick(Sender: TObject);
procedure ClientConnecting(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
i: string;
implementation
{$R *.dfm}
procedure TfrmMain.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
stBar.SimpleText := 'Подключение произошло успешно'
end;
procedure TfrmMain.ClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
stBar.SimpleText := 'Произошла ошибка'
end;
procedure TfrmMain.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
stBar.SimpleText := 'Клиент отключен'
end;
procedure TfrmMain.ClientConnecting(Sender: TObject; Socket: TCustomWinSocket);
begin
stBar.SimpleText := 'Идет подключение...'
end;
procedure TfrmMain.btExitClick(Sender: TObject);
begin
frmMain.Close
end;
procedure TfrmMain.btConnectClick(Sender: TObject);
begin
Client.Address:=(edIP.text); //Передаем клиенту IP адрес
Client.Open //Активация клиента
end;
procedure TfrmMain.btDisconnectClick(Sender: TObject);
begin
Client.Close
end;
procedure TfrmMain.btCommandClick(Sender: TObject);
begin
Client.Socket.SendText(edCommand.text);
stBar.SimpleText:='Данные отправлены';
end;
procedure TfrmMain.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
i:=Socket.ReceiveText;
stBar.SimpleText:=i;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, Buttons, ComCtrls;
type
TfrmMain = class(TForm)
Client: TClientSocket;
edIP: TEdit;
Label1: TLabel;
btConnect: TBitBtn;
Label2: TLabel;
edCommand: TEdit;
btCommand: TBitBtn;
btDisconnect: TBitBtn;
btExit: TBitBtn;
stBar: TStatusBar;
procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure btCommandClick(Sender: TObject);
procedure btDisconnectClick(Sender: TObject);
procedure btConnectClick(Sender: TObject);
procedure btExitClick(Sender: TObject);
procedure ClientConnecting(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
i: string;
implementation
{$R *.dfm}
procedure TfrmMain.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
stBar.SimpleText := 'Подключение произошло успешно'
end;
procedure TfrmMain.ClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
stBar.SimpleText := 'Произошла ошибка'
end;
procedure TfrmMain.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
stBar.SimpleText := 'Клиент отключен'
end;
procedure TfrmMain.ClientConnecting(Sender: TObject; Socket: TCustomWinSocket);
begin
stBar.SimpleText := 'Идет подключение...'
end;
procedure TfrmMain.btExitClick(Sender: TObject);
begin
frmMain.Close
end;
procedure TfrmMain.btConnectClick(Sender: TObject);
begin
Client.Address:=(edIP.text); //Передаем клиенту IP адрес
Client.Open //Активация клиента
end;
procedure TfrmMain.btDisconnectClick(Sender: TObject);
begin
Client.Close
end;
procedure TfrmMain.btCommandClick(Sender: TObject);
begin
Client.Socket.SendText(edCommand.text);
stBar.SimpleText:='Данные отправлены';
end;
procedure TfrmMain.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
i:=Socket.ReceiveText;
stBar.SimpleText:=i;
end;
end.
Может у меня гдето ту ошибка?
Очень прошу - помогите :(
Зарание благодарен
Я на 5-й дельфе этим занимался.
А вот твои комманды, что то не совсем подходят.... :-/
На 5-й дельфе у сервера есть н-ное количество сокетов.....
procedure TfrmMain.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
i := socket[Номер сокета:integer начало с 0].ReceiveText;
// if i='<имя команды>' then
// <Действие команды>;
end;
Я долго мучался, пока такая ошибка не доперла.....
Бедняга.... мой тебе совет - используй Indy (TIdTCPClient, TIdTCPServer)
этот код работает (на форме ServerSocket, ClientSocket, Memo и три кнопки - соед. сервера, соед. клиента и отправка... порт 3003, хост 127.0.0.1).....
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if Socket.ReceiveText = 'command1' then begin
end else if Socket.ReceiveText = 'command2' then begin
end else MessageBox(Handle, 'Неизвестная команда', 'Ошибка', MB_ICONERROR);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText(Memo1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Open;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket1.Open;
end;
Socket: TCustomWinSocket);
begin
if Socket.ReceiveText = 'command1' then begin
end else if Socket.ReceiveText = 'command2' then begin
end else MessageBox(Handle, 'Неизвестная команда', 'Ошибка', MB_ICONERROR);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText(Memo1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Open;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket1.Open;
end;
Цитата:
procedure TfrmMain.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
i := socket.ReceiveText;
begin
i := socket.ReceiveText;
Здесь ошибка:
Необходимо:
Цитата:
i := socket.connection[k].ReceiveText;
где к-номер соединения.
Если клиентов несколько и они все подключены то необходимо:
Цитата:
procedure TfrmMain.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
k:integer;
begin
for k:=0 to ServerSocket1.Sockets.ActiveConnections do
begin
if ServerSocket1.Sockets.Connections[k].ReciveLength>0 then
i:=ServerSocket1.Sockets.Connections[k].ReciveText;
//Принимаем текст от конкретного клиента
end;
var
k:integer;
begin
for k:=0 to ServerSocket1.Sockets.ActiveConnections do
begin
if ServerSocket1.Sockets.Connections[k].ReciveLength>0 then
i:=ServerSocket1.Sockets.Connections[k].ReciveText;
//Принимаем текст от конкретного клиента
end;