Форум: "Сети";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
ВнизSocket Найти похожие ветки
← →
B@rm@ley (2006-11-22 17:25) [0]мне нужно написать программу для обмена сообщений, для этого я выбрал компоненты ClientSocket, ServerSoсket.
Вот мой исходный текст, проблема в том что сообщения не приходят. процедура TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); не выполнятся.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, OnlineIP;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
Edit1: TEdit;
OnlineIP1: TOnlineIP;
Button2: TButton;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
///////////
procedure SendMes(Text: String);
Var
i: byte;
begin
with Form1.ServerSocket1.Socket do begin
if ActiveConnections>0 then
for i:=0 to ActiveConnections-1 do
Try
Connections[i].SendText(Text);
Application.ProcessMessages;
Except
//
end;
end; {/WITH}
end;
///////////
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.ClientSocket1.Active:=true;
Form1.ServerSocket1.Active:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMes(Form1.Edit1.Text);
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Str: string;
RemIP: string;
begin
RemIP:=Socket.RemoteAddress;
str:=socket.ReceiveText;
/////////
//вывод сообщения и ip отправителя
ShowMessage(str);
ShowMessage(RemIP);
end;
end.
← →
Dmitrij_K (2006-11-22 19:00) [1]
> Вот мой исходный текст, проблема в том что сообщения не
> приходят. процедура TForm1.ServerSocket1ClientRead(Sender:
> TObject; Socket: TCustomWinSocket); не выполнятся.
Судя по коду, ты ничего не отправляешь серверу
← →
Орион © (2006-11-22 19:06) [2]мой внутренний голос подсказывает, что проблема вот здесь:
Form1.ClientSocket1.Active:=true;
Form1.ServerSocket1.Active:=true;
попробуй местами строчки поменять.
← →
Орион © (2006-11-22 19:07) [3]ЗЫ: и событие OnError не просто так в списке значится.
← →
Орион © (2006-11-22 19:20) [4]а, ну да.
Как всегда, все намного проще :)
В [1] ответ, но строчки все таки поменяй ;)
← →
Warstone © (2006-11-23 14:18) [5]А у меня вопрос, а зачем тебе ClientSocket если ты им не пользуешься? То есть ты связываешь клиент и сервер, через сервер К КЛИЕНТАМ посылаешь сообщение(Form1.ServerSocket1) и хочешь чтоб этот-же сервер тебе ответил? (TForm1.ServerSocket1ClientRead) Жди.
На самом деле надо событие обрабатывать для клиетнского сокета. Но сама программа говорит о полном непонимании работы сети. Ты заранее знаешь с кем связываться будешь? Если нет, то где ввод ИПа удаленного сервера? Далее, если клиент подключился, то чтоб он мог тебе отправить сообщения надо создать ещё 1 ClientSocket и подключиться им к ServerSocket удаленной машины... вобщем криво это всё. Можно сказать читайте RTFM.
← →
B@rm@ley (2006-11-23 17:28) [6]Все проще. Сокет перед отпракой сообщения надо открыть. А IP я знаю и он вводиться в Edit5, просто не весь код написал. А сработай в сетях я только начал знакомиться.
//кнопка отправить
procedure TForm1.Button1Click(Sender: TObject);
begin
ForSend:=Form1.Edit1.Text;
Form1.ClientSocket1.Close;
Form1.ClientSocket1.Address:=Form1.Edit5.Text;
Form1.ClientSocket1.Open;
end;
//
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Open;
end;
// и когда сокет открыт выполняетя функция
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText(ForSend);
ForSend:="";
end;
← →
Dmitrij_K (2006-11-23 23:23) [7]Вместо ClientSocket1Connect лучше OnWrite
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c