Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заставить два TClientSocket отправлять одновременно текст!!! [D6, WinXP]


Новочеркасский Волк ©   (2006-03-13 21:49:00) 

Здравствуйте. Подскажите пожалуйсто вот мне надо чтоб по нажатию Buttion1 ClientSocket1 отправлял своему серверу текст (доустим) "ааа", а ClientSocket2 отправлял текст "ввв" своему серверу. Когда это осуществляеш вылетает ошибка, что типа нельзя отпра  влять сразу два. Я пробовал, отгораживал их Буливской переменной, что сначала один, потом другой но нет всё рано не могут!!! Подскажите что делать. Срочно надо!!!
----------------------------------------------
Заранее очень благодарен!!!


Новочеркасский Волк   (2006-03-14 18:59:00) [1]

Да спасибо всем. Всё получилось!!!


Сергей М.   (2006-03-14 16:28:00) [2]

OnWrite() на то существует... для несведущих ..

И нечего изобретать велосипеды в связи с этим фактом.

А сей факт и есть факт разрешениязаписи очередной инф-ции, требуемой к передаче, в буфер передачи.


Dmitrij_K   (2006-03-14 16:16:00) [3]

procedure TForm1.Button1Click(Sender: TObject);
begin
 if ClientSocket1.Active then ClientSocket1.Socket.SendText('E1');
 if ClientSocket2.Active then ClientSocket2.Socket.SendText('E2');
end;


Dmitrij_K   (2006-03-14 16:10:00) [4]

Когда ты отправляешь текст, еще не факт что клиент соединился с  сервером


Сергей М.   (2006-03-14 16:08:00) [5]


> чё где нитак



procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
A:=Socket.ReceiveText;
Edit1.Text:=(A);
end;


Новочеркасский Волк   (2006-03-14 15:52:00) [6]

Вот код моей проги посмотрите что не так???
Клиент:

procedure TForm1.Button1Click(Sender: TObject);
begin
if Bruud=true then
begin
ClientSocket1.Socket.SendText('E1');

Bruud:=False;
end;
If Bruud=False then
begin
ClientSocket2.Socket.SendText('E2');
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Bruud:=True;
end;

--------------------------------------------------------------
Сервер:

var
A, B: String;
 Form1: TForm1;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
A:=ServerSocket1.Socket.ReceiveText();
Edit1.Text:=(A);
end;

procedure TForm1.ServerSocket2ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
B:=ServerSocket2.Socket.ReceiveText();
Edit2.Text:=(B);
end;

-----------------------------------------------------
Порты разные 2455 и 2466. Вроде должно работать ан нет!!! Подскажите чё где нитак???
---------------------------------------------------
Заранее благодарен!!!


seeker   (2006-03-14 10:53:00) [7]

Я не знаю что там не работает, но этот кодработает
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   ClientSocket1: TClientSocket;
   ServerSocket1: TServerSocket;
   Button1: TButton;
   procedure ServerSocket1ClientConnect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure Button1Click(Sender: TObject);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure ServerSocket1ClientRead(Sender: TObject;
     Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Button1.Enabled:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Socket.Connections[0].SendText('bbb');
ClientSocket1.Socket.SendText('aaa');
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
begin
ShowMessage(Socket.ReceiveText);
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
ShowMessage(Socket.ReceiveText);
end;

end.

Или я что-то не так понял?


Kacnep   (2006-03-14 06:33:00) [8]

Не может такого быть. Правда сам именно так не пробовал. Скорее всего у тебя идет работа с одним портом...
В общем дай для начала такую инфу.
Дельф?
Блок или НеБлок?
И кусок кода твоей отправки.

Схема примерно должна быть следующая
(для НеБлок)
1. По нажатию
 назначаешь IP_Server1:PORT1
 назначаешь IP_Server2:PORT2
 Socket1.Open
 Socket2.Open

На событие ОнКоннектСокет_1 вешаешь отправку строки Тест1
Закрыть Сокет1
На событие ОнКоннектСокет_2 вешаешь отправку строки Тест2
Закрыть Сокет2

Ну и Еррор1 и Еррор2 выводи себе для инфы

В блокирующем режиме тоже самое но последовательно и лучше сразу рекомендую вывести в поток - круче. Или Заюзай Инди.


Наверх

Титульная страница Поиск, карта сайта Написать письмо